You are currently browsing legacy 4.1 version of documentation. Click here to switch to the newest 5.1 version.
Cluster Transaction - Overview
Open Cluster-Wide Session
To open cluster transaction session you have to set the TransactionMode
to TransactionMode.ClusterWide
.
using (var session = store.OpenSession(new SessionOptions
{
TransactionMode = TransactionMode.ClusterWide
}))
using (var session = store.OpenAsyncSession(new SessionOptions
{
TransactionMode = TransactionMode.ClusterWide
}))
You can store, delete and edit document and the session will track them as usual.
Working with Compare Exchange
Get Compare Exchange
session.Advanced.ClusterTransaction.GetCompareExchangeValue<T>(key);
await session.Advanced.ClusterTransaction.GetCompareExchangeValueAsync<T>(key);
Parameters
key
string
The key to retrieve
Return Value
CompareExchangeValue<T>
If the key doesn't exists it will return null
session.Advanced.ClusterTransaction.GetCompareExchangeValues<T>(keys);
await session.Advanced.ClusterTransaction.GetCompareExchangeValuesAsync<T>(keys);
Parameters
keys
string[]
Array of keys to retrieve
Return Value
Dictionary<string, CompareExchangeValue<T>>
If a key doesn't exists the associate value will be null
Create Compare Exchange
session.Advanced.ClusterTransaction.CreateCompareExchangeValue(key, value);
session.Advanced.ClusterTransaction.CreateCompareExchangeValue(key, value);
Parameters
key
string
The key to save with the associate value. This string can be up to 512 bytes.
value
T
The value to store
If the value is already exists SaveChanges()
will throw a ConcurrencyException
.
// occupy "Best NoSQL Transactional Database" to be "RavenDB"
session.Advanced.ClusterTransaction.CreateCompareExchangeValue(key: "Best NoSQL Transactional Database", value: "RavenDB");
session.SaveChanges();
// occupy "Best NoSQL Transactional Database" to be "RavenDB"
session.Advanced.ClusterTransaction.CreateCompareExchangeValue(key: "Best NoSQL Transactional Database", value: "RavenDB");
await session.SaveChangesAsync();
Update Compare Exchange
session.Advanced.ClusterTransaction.UpdateCompareExchangeValue(new CompareExchangeValue<T>(key, index, value));
session.Advanced.ClusterTransaction.UpdateCompareExchangeValue(new CompareExchangeValue<T>(key, index, value));
Parameters
item
CompareExchangeValue<T>
The item to update
If the value was changed by someone else the SaveChanges()
will throw a ConcurrencyException
.
_async
// load the existing dns record of ravendb.net
CompareExchangeValue<DNS> result = await session.Advanced.ClusterTransaction.GetCompareExchangeValueAsync<DNS>(key: "ravendb.net");
// change the ip
result.Value.IpAddress = "52.32.173.150";
session.Advanced.ClusterTransaction.UpdateCompareExchangeValue(result);
// save the changes
await session.SaveChangesAsync();
// load the existing dns record of ravendb.net
CompareExchangeValue<DNS> result = await session.Advanced.ClusterTransaction.GetCompareExchangeValueAsync<DNS>(key: "ravendb.net");
// change the ip
result.Value.IpAddress = "52.32.173.150";
session.Advanced.ClusterTransaction.UpdateCompareExchangeValue(result);
// save the changes
await session.SaveChangesAsync();
Delete Compare Exchange
session.Advanced.ClusterTransaction.DeleteCompareExchangeValue(key, index);
session.Advanced.ClusterTransaction.DeleteCompareExchangeValue(key, index);
Parameters
key
string
The key to save with the associate value
index
long
Index for concurrency control
CompareExchangeValue
Parameters
key
string
Key of the item to store. This string can be up to 512 bytes.
index
long
Index for concurrency control
value
T
The actual value to keep
Please enable JavaScript to view the comments powered by Disqus.