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 }); }
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); }
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()); }
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()); }
internal ObjectPool(int count, GetT getT) { this.getT = getT; if (count < 0) { throw new ArgumentOutOfRangeException("count"); } stack = new Stack <T>(count); }
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); }
/// <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); }
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()); }