Exemple #1
0
        public async Task <IGetResult> GetAndTouchAsync(string id, TimeSpan expiry, GetAndTouchOptions?options = null)
        {
            //sanity check for deferred bootstrapping errors
            _bucket.ThrowIfBootStrapFailed();

            //Get the collection ID
            await PopulateCidAsync().ConfigureAwait(false);

            options ??= GetAndTouchOptions.Default;
            using var rootSpan      = RootSpan(OuterRequestSpans.ServiceSpan.Kv.GetAndTouch);
            using var getAndTouchOp = new GetT <byte[]>(_bucket.Name, id)
                  {
                      Cid     = Cid,
                      CName   = Name,
                      SName   = ScopeName,
                      Expires = expiry.ToTtl(),
                      Span    = rootSpan
                  };
            _operationConfigurator.Configure(getAndTouchOp, options);

            using var cts = CreateRetryTimeoutCancellationTokenSource(options, getAndTouchOp, out var tokenPair);
            await _bucket.RetryAsync(getAndTouchOp, tokenPair).ConfigureAwait(false);

            return(new GetResult(getAndTouchOp.ExtractBody(), getAndTouchOp.Transcoder, _getLogger)
            {
                Id = getAndTouchOp.Key,
                Cas = getAndTouchOp.Cas,
                Flags = getAndTouchOp.Flags,
                Header = getAndTouchOp.Header,
                OpCode = getAndTouchOp.OpCode
            });
        }
Exemple #2
0
        public async Task <IGetResult> GetAndTouchAsync(string id, TimeSpan expiry, GetAndTouchOptions?options = null)
        {
            //sanity check for deferred bootstrapping errors
            _bucket.ThrowIfBootStrapFailed();

            options ??= new GetAndTouchOptions();
            using var rootSpan      = RootSpan(OperationNames.GetAndTouch);
            using var getAndTouchOp = new GetT <byte[]>(_bucket.Name, id)
                  {
                      Cid     = Cid,
                      CName   = Name,
                      Expires = expiry.ToTtl(),
                      Span    = rootSpan
                  };
            _operationConfigurator.Configure(getAndTouchOp, options);

            await RetryUntilTimeoutOrSuccessAsync(options.TokenValue, options.TimeoutValue, getAndTouchOp).ConfigureAwait(false);

            return(new GetResult(getAndTouchOp.ExtractBody(), getAndTouchOp.Transcoder, _getLogger)
            {
                Id = getAndTouchOp.Key,
                Cas = getAndTouchOp.Cas,
                Flags = getAndTouchOp.Flags,
                Header = getAndTouchOp.Header,
                OpCode = getAndTouchOp.OpCode
            });
        }
        public async Task <IGetResult> GetAndTouchAsync(string id, TimeSpan expiry, GetAndTouchOptions?options = null)
        {
            //sanity check for deferred bootstrapping errors
            _bucket.ThrowIfBootStrapFailed();

            options ??= new GetAndTouchOptions();
            var transcoder = options.TranscoderValue ?? _transcoder;

            using var getAndTouchOp = new GetT <byte[]>(_bucket.Name, id)
                  {
                      Cid        = Cid,
                      Expires    = expiry.ToTtl(),
                      Transcoder = transcoder
                  };
            await _bucket.SendAsync(getAndTouchOp, options.TokenValue, options.TimeoutValue).ConfigureAwait(false);

            return(new GetResult(getAndTouchOp.ExtractData(), transcoder, _getLogger)
            {
                Id = getAndTouchOp.Key,
                Cas = getAndTouchOp.Cas,
                Flags = getAndTouchOp.Flags,
                Header = getAndTouchOp.Header,
                OpCode = getAndTouchOp.OpCode
            });
        }
        public async Task <IGetResult> GetAndTouchAsync(string id, TimeSpan expiry, GetAndTouchOptions options)
        {
            var transcoder = options.Transcoder ?? _transcoder;

            using (var getAndTouchOp = new GetT <byte[]>
            {
                Key = id,
                Cid = Cid,
                Expires = expiry.ToTtl(),
                DurabilityTimeout = TimeSpan.FromMilliseconds(1500),
                Transcoder = transcoder
            })
            {
                await _bucket.SendAsync(getAndTouchOp, options.Token, options.Timeout);

                return(new GetResult(getAndTouchOp.ExtractData(), transcoder)
                {
                    Id = getAndTouchOp.Key,
                    Cas = getAndTouchOp.Cas,
                    Flags = getAndTouchOp.Flags,
                    Header = getAndTouchOp.Header,
                    OpCode = getAndTouchOp.OpCode
                });
            }
        }
        public void When_Key_Exists_GetT_Returns_Value()
        {
            var key = "When_Key_Exists_GetT_Returns_Value";

            //delete the value if it exists
            var delete = new Delete(key, GetVBucket(), Transcoder, OperationLifespanTimeout);

            IOStrategy.Execute(delete);

            //Add the key
            var add = new Add <dynamic>(key, new { foo = "foo" }, GetVBucket(), Transcoder, OperationLifespanTimeout);

            Assert.IsTrue(IOStrategy.Execute(add).Success);

            var get = new GetT <dynamic>(key, GetVBucket(), Transcoder, OperationLifespanTimeout)
            {
                Expires = new TimeSpan(0, 0, 0, 1).ToTtl()
            };

            var result = IOStrategy.Execute(get);

            Assert.IsTrue(result.Success);

            var expected = new { foo = "foo" };

            Assert.AreEqual(result.Value.foo.Value, expected.foo);
        }
Exemple #6
0
        public async Task <IGetResult> GetAndTouchAsync(string id, TimeSpan expiry, GetAndTouchOptions?options = null)
        {
            //sanity check for deferred bootstrapping errors
            _bucket.ThrowIfBootStrapFailed();

            options ??= new GetAndTouchOptions();
            var transcoder = options.TranscoderValue ?? _transcoder;

            using var getAndTouchOp = new GetT <byte[]>
                  {
                      Key               = id,
                      Cid               = Cid,
                      Expires           = expiry.ToTtl(),
                      DurabilityTimeout = TimeSpan.FromMilliseconds(1500),
                      Transcoder        = transcoder
                  };
            await _bucket.SendAsync(getAndTouchOp, options.TokenValue, options.TimeoutValue);

            return(new GetResult(getAndTouchOp.ExtractData(), transcoder)
            {
                Id = getAndTouchOp.Key,
                Cas = getAndTouchOp.Cas,
                Flags = getAndTouchOp.Flags,
                Header = getAndTouchOp.Header,
                OpCode = getAndTouchOp.OpCode
            });
        }
        public void When_ErrorCode_Is_Not_Null_And_RetryStrategy_Is_None_CanRetry_Returns_False()
        {
            var get = new GetT <dynamic>("thekey", null, new DefaultTranscoder(), 0);

            get.GetType().GetField("ErrorCode", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(get, new ErrorCode());
            Assert.False(get.CanRetry());
        }
Exemple #8
0
 public static T If <U>(U item, GetT <U> lambda) where U : class
 {
     if (item == null)
     {
         return(default(T));
     }
     return(lambda(item));
 }
        public void When_ErrorCode_Is_Null_And_Has_Cas_CanRetry_Returns_True()
        {
            var get = new GetT <dynamic>("thekey", null, new DefaultTranscoder(), 0)
            {
                Cas = 1010100010
            };

            Assert.True(get.CanRetry());
        }
Exemple #10
0
        internal ObjectPool(int count, GetT getT)
        {
            this.getT = getT;
            if (count < 0)
            {
                throw new ArgumentOutOfRangeException("count");
            }

            stack = new Stack <T>(count);
        }
Exemple #11
0
        public async Task <IGetResult> GetAndTouch(string id, TimeSpan expiration, GetAndTouchOptions options)
        {
            var getAndTouchOp = new GetT <byte[]>
            {
                Key               = id,
                Cid               = Cid,
                Expires           = expiration.ToTtl(),
                DurabilityLevel   = options.DurabilityLevel,
                DurabilityTimeout = TimeSpan.FromMilliseconds(1500)
            };

            await ExecuteOp(getAndTouchOp, options.Token, options.Timeout);

            return(new GetResult(getAndTouchOp.Data.ToArray(), _transcoder));
        }
        public override IOperation Clone()
        {
            var cloned = new GetT <T>
            {
                Key                     = Key,
                Content                 = Content,
                Transcoder              = Transcoder,
                VBucketId               = VBucketId,
                Opaque                  = Opaque,
                Attempts                = Attempts,
                Cas                     = Cas,
                CreationTime            = CreationTime,
                Expires                 = Expires,
                LastConfigRevisionTried = LastConfigRevisionTried,
                BucketName              = BucketName,
                ErrorCode               = ErrorCode
            };

            return(cloned);
        }
Exemple #13
0
        /// <summary>
        /// 获取内容
        /// </summary>
        /// <typeparam name="Ti"></typeparam>
        /// <param name="key"></param>
        /// <param name="fun"></param>
        /// <returns></returns>
        public static Ti Get <Ti>(string key, GetT <Ti> fun)
        {
            object obj;

            if (_register.TryGetValue(key, out obj))
            {
                if (obj is Ti)
                {
                    return((Ti)obj);
                }
            }

            if (fun == null)
            {
                return(default(Ti));
            }

            Ti t = fun();

            Add(key, t);

            return(t);
        }
        public void When_Key_Exists_GetT_Returns_Value()
        {
            var key = "When_Key_Exists_GetT_Returns_Value";

            //delete the value if it exists
            var delete = new Delete(key, GetVBucket(), Transcoder, OperationLifespanTimeout);
            IOStrategy.Execute(delete);

            //Add the key
            var add = new Add<dynamic>(key, new { foo = "foo" }, GetVBucket(), Transcoder, OperationLifespanTimeout);
            Assert.IsTrue(IOStrategy.Execute(add).Success);

            var get = new GetT<dynamic>(key, GetVBucket(), Transcoder, OperationLifespanTimeout)
            {
                Expires = new TimeSpan(0,0,0, 1).ToTtl()
            };

            var result = IOStrategy.Execute(get);
            Assert.IsTrue(result.Success);

            var expected = new { foo = "foo" };
            Assert.AreEqual(result.Value.foo.Value, expected.foo);
        }
Exemple #15
0
 public OnChangeDetector(GetT getT, EqualT equalT)
 {
     this.getT   = getT;
     this.equalT = equalT;
 }
        public void When_ErrorCode_Is_Null_CanRetry_Returns_False()
        {
            var get = new GetT <dynamic>("thekey", null, new DefaultTranscoder(), 0);

            Assert.False(get.CanRetry());
        }