public override async Task <ContainerQueryProperties> GetCachedContainerQueryPropertiesAsync( Uri containerLink, PartitionKey?partitionKey, CancellationToken cancellationToken) { ContainerProperties containerProperties = await this.clientContext.GetCachedContainerPropertiesAsync( containerLink.OriginalString, cancellationToken); string effectivePartitionKeyString = null; if (partitionKey != null) { // Dis-ambiguate the NonePK if used Documents.Routing.PartitionKeyInternal partitionKeyInternal = null; if (partitionKey.Value.IsNone) { partitionKeyInternal = containerProperties.GetNoneValue(); } else { partitionKeyInternal = partitionKey.Value.InternalKey; } effectivePartitionKeyString = partitionKeyInternal.GetEffectivePartitionKeyString(containerProperties.PartitionKey); } return(new ContainerQueryProperties( containerProperties.ResourceId, effectivePartitionKeyString, containerProperties.PartitionKey)); }
private async Task FillOperationPropertiesAsync(ItemBatchOperation operation, CancellationToken cancellationToken) { // Same logic from RequestInvokerHandler to manage partition key migration if (object.ReferenceEquals(operation.PartitionKey, PartitionKey.None)) { Documents.Routing.PartitionKeyInternal partitionKeyInternal = await this.cosmosContainer.GetNonePartitionKeyValueAsync(cancellationToken).ConfigureAwait(false); operation.PartitionKeyJson = partitionKeyInternal.ToJsonString(); } else { operation.PartitionKeyJson = operation.PartitionKey.Value.ToString(); } }
private async Task <string> ResolvePartitionKeyRangeIdAsync( ItemBatchOperation operation, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); PartitionKeyDefinition partitionKeyDefinition = await this.cosmosContainer.GetPartitionKeyDefinitionAsync(cancellationToken); CollectionRoutingMap collectionRoutingMap = await this.cosmosContainer.GetRoutingMapAsync(cancellationToken); Debug.Assert(operation.RequestOptions?.Properties?.TryGetValue(WFConstants.BackendHeaders.EffectivePartitionKeyString, out object epkObj) == null, "EPK is not supported"); Documents.Routing.PartitionKeyInternal partitionKeyInternal = await this.GetPartitionKeyInternalAsync(operation, cancellationToken); operation.PartitionKeyJson = partitionKeyInternal.ToJsonString(); string effectivePartitionKeyString = partitionKeyInternal.GetEffectivePartitionKeyString(partitionKeyDefinition); return(collectionRoutingMap.GetRangeByEffectivePartitionKey(effectivePartitionKeyString).Id); }