Example #1
0
        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));
            }
        }