Exemple #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));
        }
 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)));
 })
 {
 }
Exemple #3
0
        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));
        }