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)); }
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)); }