Пример #1
0
        private FeedEstimator BuildFeedEstimator()
        {
            if (this.remainingWorkEstimator == null)
            {
                Func <string, string, bool, FeedIterator> feedCreator = (string partitionKeyRangeId, string continuationToken, bool startFromBeginning) =>
                {
                    return(ResultSetIteratorUtils.BuildResultSetIterator(
                               partitionKeyRangeId: partitionKeyRangeId,
                               continuationToken: continuationToken,
                               maxItemCount: 1,
                               cosmosContainer: this.monitoredContainer,
                               startTime: null,
                               startFromBeginning: string.IsNullOrEmpty(continuationToken)));
                };

                this.remainingWorkEstimator = new RemainingWorkEstimatorCore(
                    this.documentServiceLeaseStoreManager.LeaseContainer,
                    feedCreator,
                    this.monitoredContainer.ClientContext.Client.ClientOptions?.GatewayModeMaxConnectionLimit ?? 1);
            }

            ChangeFeedEstimatorDispatcher estimatorDispatcher = new ChangeFeedEstimatorDispatcher(this.initialEstimateDelegate, this.estimatorPeriod);

            return(new FeedEstimatorCore(estimatorDispatcher, this.remainingWorkEstimator));
        }
Пример #2
0
        public async Task FeedEstimatorCore_ReceivesEstimation()
        {
            const long estimation = 10;
            bool       detectedEstimationCorrectly = false;
            CancellationTokenSource       cancellationTokenSource = new CancellationTokenSource(5000);
            ChangeFeedEstimatorDispatcher estimatorDispatcher     = new ChangeFeedEstimatorDispatcher((long detectedEstimation, CancellationToken token) =>
            {
                detectedEstimationCorrectly = estimation == detectedEstimation;

                return(Task.CompletedTask);
            }, TimeSpan.FromSeconds(1));

            Mock <RemainingWorkEstimator> mockedEstimator = new Mock <RemainingWorkEstimator>();

            mockedEstimator.Setup(e => e.GetEstimatedRemainingWorkAsync(It.IsAny <CancellationToken>())).ReturnsAsync(estimation);

            FeedEstimatorCore estimatorCore = new FeedEstimatorCore(estimatorDispatcher, mockedEstimator.Object);

            try
            {
                await estimatorCore.RunAsync(cancellationTokenSource.Token);
            }
            catch (TaskCanceledException)
            {
                // expected
            }

            Assert.IsTrue(detectedEstimationCorrectly);
        }
        private FeedEstimator BuildFeedEstimator()
        {
            RemainingWorkEstimatorCore remainingWorkEstimator = new RemainingWorkEstimatorCore(
                this.documentServiceLeaseStoreManager.LeaseContainer,
                this.monitoredContainer,
                this.monitoredContainer.Client.Configuration?.MaxConnectionLimit ?? 1);

            ChangeFeedEstimatorDispatcher estimatorDispatcher = new ChangeFeedEstimatorDispatcher(this.initialEstimateDelegate, this.estimatorPeriod);

            return(new FeedEstimatorCore(estimatorDispatcher, remainingWorkEstimator));
        }