Esempio n. 1
0
        private async Task Operation_Succeeds_Without_Retry()
        {
            var op = new Get <dynamic> {
                RetryStrategy = new BestEffortRetryStrategy()
            };
            var bucketMock = new Mock <BucketBase>();

            bucketMock.Setup(x => x.SendAsync(op, It.IsAny <CancellationToken>(), It.IsAny <TimeSpan>()))
            .Returns(Task.CompletedTask);

            var tokenSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(2500));

            tokenSource.Token.ThrowIfCancellationRequested();

            await RetryOrchestrator.RetryAsync(bucketMock.Object, op, tokenSource.Token,
                                               TimeSpan.FromMilliseconds(2500));

            Assert.Equal(1u, op.Attempts);
        }
Esempio n. 2
0
        private async Task AssertRetryAsync(IOperation op, Exception exp)
        {
            var bucketMock = new Mock <BucketBase>();

            bucketMock.Setup(x => x.SendAsync(op, It.IsAny <CancellationToken>(), It.IsAny <TimeSpan>())).Throws(exp);
            var tokenSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(2500));

            tokenSource.Token.ThrowIfCancellationRequested();
            try
            {
                await RetryOrchestrator.RetryAsync(bucketMock.Object, op, tokenSource.Token,
                                                   TimeSpan.FromMilliseconds(2500));
            }
            catch (Exception e)
            {
                Assert.IsType <TimeoutException>(e);
                Assert.True(op.Attempts > 1);
            }
        }
Esempio n. 3
0
 public Task RetryAsync(IOperation operation, CancellationToken token = default) =>
 RetryOrchestrator.RetryAsync(this, operation, token);
        public override async Task <IViewResult <TKey, TValue> > ViewQueryAsync <TKey, TValue>(string designDocument, string viewName, ViewOptions?options = null)
        {
            ThrowIfBootStrapFailed();

            options ??= new ViewOptions();
            // create old style query
            var query = new ViewQuery(GetViewUri().ToString())
            {
                UseSsl = Context.ClusterOptions.EffectiveEnableTls
            };

            //Normalize to new naming convention for public API RFC#51
            var staleState = StaleState.None;

            if (options.ScanConsistencyValue == ViewScanConsistency.RequestPlus)
            {
                staleState = StaleState.False;
            }
            if (options.ScanConsistencyValue == ViewScanConsistency.UpdateAfter)
            {
                staleState = StaleState.UpdateAfter;
            }
            if (options.ScanConsistencyValue == ViewScanConsistency.NotBounded)
            {
                staleState = StaleState.Ok;
            }

            query.Bucket(Name);
            query.From(designDocument, viewName);
            query.Stale(staleState);
            query.Limit(options.LimitValue);
            query.Skip(options.SkipValue);
            query.StartKey(options.StartKeyValue);
            query.StartKeyDocId(options.StartKeyDocIdValue);
            query.EndKey(options.EndKeyValue);
            query.EndKeyDocId(options.EndKeyDocIdValue);
            query.InclusiveEnd(options.InclusiveEndValue);
            query.Group(options.GroupValue);
            query.GroupLevel(options.GroupLevelValue);
            query.Key(options.KeyValue);
            query.Keys(options.KeysValue);
            query.Reduce(options.ReduceValue);
            query.Development(options.DevelopmentValue);
            query.Debug(options.DebugValue);
            query.Namespace(options.NamespaceValue);
            query.OnError(options.OnErrorValue == ViewErrorMode.Stop);
            query.Timeout    = options.TimeoutValue ?? Context.ClusterOptions.ViewTimeout;
            query.Serializer = options.SerializerValue;

            if (options.ViewOrderingValue == ViewOrdering.Decesending)
            {
                query.Desc();
            }
            else
            {
                query.Asc();
            }

            if (options.FullSetValue.HasValue && options.FullSetValue.Value)
            {
                query.FullSet();
            }

            foreach (var kvp in options.RawParameters)
            {
                query.Raw(kvp.Key, kvp.Value);
            }

            async Task <IViewResult <TKey, TValue> > Func()
            {
                var client1 = _viewClientLazy.Value;

                return(await client1.ExecuteAsync <TKey, TValue>(query).ConfigureAwait(false));
            }

            return(await RetryOrchestrator.RetryAsync(Func, query).ConfigureAwait(false));
        }
Esempio n. 5
0
 public virtual Task RetryAsync(IOperation operation, CancellationToken token = default, TimeSpan?timeout = null) =>
 RetryOrchestrator.RetryAsync(this, operation, token, timeout);
Esempio n. 6
0
 public virtual async Task RetryAsync(IOperation operation, CancellationToken token = default) =>
 await RetryOrchestrator.RetryAsync(this, operation, token).ConfigureAwait(false);
 public virtual async Task RetryAsync(IOperation operation, CancellationToken token = default, TimeSpan?timeout = null) =>
 await RetryOrchestrator.RetryAsync(this, operation, token, timeout).ConfigureAwait(false);