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 ChangeFeedEstimatorIterator( string processorName, ContainerInternal monitoredContainer, ContainerInternal leaseContainer, ChangeFeedEstimatorRequestOptions changeFeedEstimatorRequestOptions) : this( processorName, monitoredContainer, leaseContainer, changeFeedEstimatorRequestOptions, (string partitionKeyRangeId, string continuationToken, bool startFromBeginning) => { return(ResultSetIteratorUtils.BuildResultSetIterator( partitionKeyRangeId : partitionKeyRangeId, continuationToken : continuationToken, maxItemCount : 1, container : monitoredContainer, startTime : null, startFromBeginning : string.IsNullOrEmpty(continuationToken))); }) { }
public override FeedProcessor Create(DocumentServiceLease lease, ChangeFeedObserver <T> observer) { if (observer == null) { throw new ArgumentNullException(nameof(observer)); } if (lease == null) { throw new ArgumentNullException(nameof(lease)); } ProcessorSettings settings = new ProcessorSettings { StartContinuation = !string.IsNullOrEmpty(lease.ContinuationToken) ? lease.ContinuationToken : this.changeFeedProcessorOptions.StartContinuation, LeaseToken = lease.CurrentLeaseToken, FeedPollDelay = this.changeFeedProcessorOptions.FeedPollDelay, MaxItemCount = this.changeFeedProcessorOptions.MaxItemCount, StartFromBeginning = this.changeFeedProcessorOptions.StartFromBeginning, StartTime = this.changeFeedProcessorOptions.StartTime, SessionToken = this.changeFeedProcessorOptions.SessionToken, }; string partitionKeyRangeId = lease.CurrentLeaseToken; PartitionCheckpointerCore checkpointer = new PartitionCheckpointerCore(this.leaseCheckpointer, lease); ChangeFeedPartitionKeyResultSetIteratorCore iterator = ResultSetIteratorUtils.BuildResultSetIterator( partitionKeyRangeId: partitionKeyRangeId, continuationToken: settings.StartContinuation, maxItemCount: settings.MaxItemCount, cosmosContainer: this.container, startTime: settings.StartTime, startFromBeginning: settings.StartFromBeginning); return(new FeedProcessorCore <T>(observer, iterator, settings, checkpointer, this.cosmosJsonSerializer)); }