public DefaultDocumentQueryExecutionContext( IDocumentQueryClient client, ResourceType resourceTypeEnum, Type resourceType, Expression expression, FeedOptions feedOptions, string resourceLink, bool isContinuationExpected, Guid correlatedActivityId) : base( client, resourceTypeEnum, resourceType, expression, feedOptions, resourceLink, false, correlatedActivityId) { this.isContinuationExpected = isContinuationExpected; this.fetchSchedulingMetrics = new SchedulingStopwatch(); this.fetchSchedulingMetrics.Ready(); this.providedRangesCache = new Dictionary <string, IReadOnlyList <Range <string> > >(); this.fetchExecutionRangeAccumulator = new FetchExecutionRangeAccumulator(singlePartitionKeyId); this.retries = -1; this.partitionRoutingHelper = new PartitionRoutingHelper(); }
/// <summary> /// Initializes a new instance of the ItemProducer class. /// </summary> /// <param name="queryContext">request context</param> /// <param name="querySpecForInit">query spec for initialization</param> /// <param name="partitionKeyRange">The partition key range.</param> /// <param name="createRetryPolicyFunc">The callback to create the retry policy.</param> /// <param name="produceAsyncCompleteCallback">The callback to call once you are done fetching.</param> /// <param name="equalityComparer">The comparer to use to determine whether the producer has seen a new document.</param> /// <param name="initialPageSize">The initial page size.</param> /// <param name="initialContinuationToken">The initial continuation token.</param> public ItemProducer( CosmosQueryContext queryContext, SqlQuerySpec querySpecForInit, PartitionKeyRange partitionKeyRange, Func <IDocumentClientRetryPolicy> createRetryPolicyFunc, ProduceAsyncCompleteDelegate produceAsyncCompleteCallback, IEqualityComparer <CosmosElement> equalityComparer, long initialPageSize = 50, string initialContinuationToken = null) { this.bufferedPages = new AsyncCollection <TryMonad <FeedResponse <CosmosElement> > >(); // We use a binary semaphore to get the behavior of a mutex, // since fetching documents from the backend using a continuation token is a critical section. this.fetchSemaphore = new SemaphoreSlim(1, 1); if (partitionKeyRange == null) { throw new ArgumentNullException(nameof(partitionKeyRange)); } if (createRetryPolicyFunc == null) { throw new ArgumentNullException(nameof(createRetryPolicyFunc)); } if (produceAsyncCompleteCallback == null) { throw new ArgumentNullException(nameof(produceAsyncCompleteCallback)); } if (equalityComparer == null) { throw new ArgumentNullException(nameof(equalityComparer)); } this.queryContext = queryContext; this.querySpecForInit = querySpecForInit; this.PartitionKeyRange = partitionKeyRange; this.createRetryPolicyFunc = createRetryPolicyFunc; this.produceAsyncCompleteCallback = produceAsyncCompleteCallback; this.equalityComparer = equalityComparer; this.pageSize = initialPageSize; this.currentContinuationToken = initialContinuationToken; this.BackendContinuationToken = initialContinuationToken; this.PreviousContinuationToken = initialContinuationToken; if (!string.IsNullOrEmpty(initialContinuationToken)) { this.hasStartedFetching = true; this.IsActive = true; } this.fetchSchedulingMetrics = new SchedulingStopwatch(); this.fetchSchedulingMetrics.Ready(); this.fetchExecutionRangeAccumulator = new FetchExecutionRangeAccumulator(); this.HasMoreResults = true; }
public DefaultDocumentQueryExecutionContext( DocumentQueryExecutionContextBase.InitParams constructorParams, bool isContinuationExpected) : base(constructorParams) { this.isContinuationExpected = isContinuationExpected; this.fetchSchedulingMetrics = new SchedulingStopwatch(); this.fetchSchedulingMetrics.Ready(); this.fetchExecutionRangeAccumulator = new FetchExecutionRangeAccumulator(); this.providedRangesCache = new Dictionary <string, IReadOnlyList <Range <string> > >(); this.retries = -1; this.partitionRoutingHelper = new PartitionRoutingHelper(); }
public CosmosGatewayQueryExecutionContext( CosmosQueryContext cosmosQueryContext) { if (cosmosQueryContext == null) { throw new ArgumentNullException(nameof(cosmosQueryContext)); } this.queryContext = cosmosQueryContext; this.fetchSchedulingMetrics = new SchedulingStopwatch(); this.fetchSchedulingMetrics.Ready(); this.fetchExecutionRangeAccumulator = new FetchExecutionRangeAccumulator(); this.retries = -1; this.partitionRoutingHelper = new PartitionRoutingHelper(); }
/// <summary> /// Initializes a new instance of the DocumentProducer class. /// </summary> /// <param name="partitionKeyRange">The partition key range.</param> /// <param name="createRequestFunc">The callback to create a request.</param> /// <param name="executeRequestFunc">The callback to execute the request.</param> /// <param name="createRetryPolicyFunc">The callback to create the retry policy.</param> /// <param name="produceAsyncCompleteCallback">The callback to call once you are done fetching.</param> /// <param name="equalityComparer">The comparer to use to determine whether the producer has seen a new document.</param> /// <param name="initialPageSize">The initial page size.</param> /// <param name="initialContinuationToken">The initial continuation token.</param> public DocumentProducer( PartitionKeyRange partitionKeyRange, Func <PartitionKeyRange, string, int, DocumentServiceRequest> createRequestFunc, Func <DocumentServiceRequest, CancellationToken, Task <FeedResponse <CosmosElement> > > executeRequestFunc, Func <IDocumentClientRetryPolicy> createRetryPolicyFunc, ProduceAsyncCompleteDelegate produceAsyncCompleteCallback, IEqualityComparer <CosmosElement> equalityComparer, long initialPageSize = 50, string initialContinuationToken = null) { this.bufferedPages = new AsyncCollection <FeedResponse <CosmosElement> >(); this.fetchSemaphore = new SemaphoreSlim(1, 1); if (partitionKeyRange == null) { throw new ArgumentNullException(nameof(partitionKeyRange)); } if (createRequestFunc == null) { throw new ArgumentNullException(nameof(createRequestFunc)); } if (executeRequestFunc == null) { throw new ArgumentNullException(nameof(executeRequestFunc)); } if (createRetryPolicyFunc == null) { throw new ArgumentNullException(nameof(createRetryPolicyFunc)); } if (produceAsyncCompleteCallback == null) { throw new ArgumentNullException(nameof(produceAsyncCompleteCallback)); } if (equalityComparer == null) { throw new ArgumentNullException(nameof(equalityComparer)); } this.PartitionKeyRange = partitionKeyRange; this.createRequestFunc = createRequestFunc; this.executeRequestFunc = executeRequestFunc; this.createRetryPolicyFunc = createRetryPolicyFunc; this.produceAsyncCompleteCallback = produceAsyncCompleteCallback; this.equalityComparer = equalityComparer; this.pageSize = initialPageSize; this.currentContinuationToken = initialContinuationToken; this.backendContinuationToken = initialContinuationToken; this.previousContinuationToken = initialContinuationToken; if (!string.IsNullOrEmpty(initialContinuationToken)) { this.hasStartedFetching = true; this.isActive = true; } this.fetchSchedulingMetrics = new SchedulingStopwatch(); this.fetchSchedulingMetrics.Ready(); this.fetchExecutionRangeAccumulator = new FetchExecutionRangeAccumulator(this.PartitionKeyRange.Id); this.hasMoreResults = true; }