public IObserveOperationResult Observe(string key, ulong cas, PersistTo persistTo, ReplicateTo replicateTo,
ObserveKeyState persistedKeyState = ObserveKeyState.FoundPersisted,
ObserveKeyState replicatedState = ObserveKeyState.FoundNotPersisted)
{
var hashedKey = this.KeyTransformer.Transform(key);
var vbucket = this.poolInstance.GetVBucket(key);
var nodes = this.poolInstance.GetWorkingNodes().ToArray();
var command = this.poolInstance.OperationFactory.Observe(hashedKey, vbucket.Index, cas);
var runner = new ObserveHandler(new ObserveSettings
{
PersistTo = persistTo,
ReplicateTo = replicateTo,
Key = hashedKey,
Cas = cas,
Timeout = observeTimeout
});
//Master only persistence
if (replicateTo == ReplicateTo.Zero && persistTo == PersistTo.One)
{
return(runner.HandleMasterPersistence(poolInstance, persistedKeyState));
}
else if (replicateTo == ReplicateTo.Zero && persistTo == PersistTo.Zero) //used for key exists checks
{
return(runner.HandleMasterOnlyInCache(poolInstance));
}
else
{
return(runner.HandleMasterPersistenceWithReplication(poolInstance, persistedKeyState, replicatedState));
}
}