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)); } }