Summary
Throughput bucketing has been available in the preview package of the .NET SDK since 3.50.0-preview.0 and is still preview-only as of 3.63.0-preview.1. It has had no API-shape changes across roughly fourteen preview releases, which suggests the surface is stable and ready for GA promotion.
This issue tracks (a) promoting the feature to the GA package in the .NET SDK and (b) confirming/driving parity across the other language SDKs.
Current state (.NET)
The entire public surface is gated behind #if PREVIEW:
| API |
Location |
RequestOptions.ThroughputBucket |
Microsoft.Azure.Cosmos/src/RequestOptions/RequestOptions.cs (~L128) |
CosmosClientOptions.ThroughputBucket |
Microsoft.Azure.Cosmos/src/CosmosClientOptions.cs (~L1221) |
CosmosClientBuilder.WithThroughputBucket(int) |
Microsoft.Azure.Cosmos/src/Fluent/CosmosClientBuilder.cs (~L843) |
The internal plumbing is not preview-gated and already ships in GA:
RequestInvokerHandler.ValidateAndSetThroughputBucket — resolves request-level over client-level precedence and emits the header.
ClientPipelineBuilder / RequestInvokerHandler — carry requestedClientThroughputBucket through the pipeline.
DocumentClient — sets HttpConstants.HttpHeaders.ThroughputBucket for the v2-options path.
Because only the public properties are gated, promotion is largely a matter of removing the #if PREVIEW guards and regenerating contracts — there is no new behavior to implement.
Preview contract files confirming the surface: contracts/API_3.50.0-preview.0.txt … contracts/API_3.63.0-preview.1.txt. The feature appears in no GA contract file.
Proposed work (.NET)
Cross-SDK parity
Throughput bucketing is a service-side feature surfaced through the x-ms-cosmos-throughput-bucket request header, so every SDK should expose it consistently. GA'ing only .NET would leave customers with an uneven story across languages.
Please confirm the current status and drive to GA in each:
For each SDK, capture: current status (not implemented / preview / GA), the API shape used, and the target release. Where naming differs across SDKs, flag it before GA — the API shape is much harder to change afterwards.
Parity table (to fill in)
| SDK |
Status |
API surface |
Target GA release |
| .NET |
Preview since 3.50.0-preview.0 |
CosmosClientOptions.ThroughputBucket, RequestOptions.ThroughputBucket, CosmosClientBuilder.WithThroughputBucket |
TBD |
| Java |
TBD |
TBD |
TBD |
| Python |
TBD |
TBD |
TBD |
| JavaScript |
TBD |
TBD |
TBD |
| Go |
TBD |
TBD |
TBD |
Open questions
- Is the service-side feature fully GA, or still gated to specific accounts/regions? GA'ing the client API ahead of the service would be a poor experience.
- Should the valid bucket range be validated client-side at GA, or continue to rely on the service to reject invalid values?
- Do we need a diagnostics surface showing which bucket a request was attributed to?
Related
- Preview contracts:
Microsoft.Azure.Cosmos/contracts/API_3.50.0-preview.0.txt through API_3.63.0-preview.1.txt
- Header constant:
HttpConstants.HttpHeaders.ThroughputBucket
- Service errors:
RMResources.ThroughputBucketingNotEnabled, RMResources.InvalidThroughputBuckets
Summary
Throughput bucketing has been available in the preview package of the .NET SDK since
3.50.0-preview.0and is still preview-only as of3.63.0-preview.1. It has had no API-shape changes across roughly fourteen preview releases, which suggests the surface is stable and ready for GA promotion.This issue tracks (a) promoting the feature to the GA package in the .NET SDK and (b) confirming/driving parity across the other language SDKs.
Current state (.NET)
The entire public surface is gated behind
#if PREVIEW:RequestOptions.ThroughputBucketMicrosoft.Azure.Cosmos/src/RequestOptions/RequestOptions.cs(~L128)CosmosClientOptions.ThroughputBucketMicrosoft.Azure.Cosmos/src/CosmosClientOptions.cs(~L1221)CosmosClientBuilder.WithThroughputBucket(int)Microsoft.Azure.Cosmos/src/Fluent/CosmosClientBuilder.cs(~L843)The internal plumbing is not preview-gated and already ships in GA:
RequestInvokerHandler.ValidateAndSetThroughputBucket— resolves request-level over client-level precedence and emits the header.ClientPipelineBuilder/RequestInvokerHandler— carryrequestedClientThroughputBucketthrough the pipeline.DocumentClient— setsHttpConstants.HttpHeaders.ThroughputBucketfor the v2-options path.Because only the public properties are gated, promotion is largely a matter of removing the
#if PREVIEWguards and regenerating contracts — there is no new behavior to implement.Preview contract files confirming the surface:
contracts/API_3.50.0-preview.0.txt…contracts/API_3.63.0-preview.1.txt. The feature appears in no GA contract file.Proposed work (.NET)
ThroughputBucketingNotEnabled/InvalidThroughputBuckets. Decide whether GA needs a clearer client-side error or documentation.#if PREVIEWguards from the three public APIs listed above.UpdateContracts.ps1) and verifyThroughputBucketnow appears inAPI_<version>.txt.DotNetPreviewSDKAPIChanges.json.ArgumentExceptionthrown whenThroughputBucketis set inRequestOptionson certain paths is the intended GA contract, not a preview-era limitation.changelog.mdentry under### Unreleased→Features Added, written in customer-facing language.Microsoft.Azure.Cosmos.Samples/) to reflect GA availability.Cross-SDK parity
Throughput bucketing is a service-side feature surfaced through the
x-ms-cosmos-throughput-bucketrequest header, so every SDK should expose it consistently. GA'ing only .NET would leave customers with an uneven story across languages.Please confirm the current status and drive to GA in each:
azure-sdk-for-java(azure-cosmos)azure-sdk-for-python(azure-cosmos)azure-sdk-for-js(@azure/cosmos)azure-sdk-for-go(azcosmos)For each SDK, capture: current status (not implemented / preview / GA), the API shape used, and the target release. Where naming differs across SDKs, flag it before GA — the API shape is much harder to change afterwards.
Parity table (to fill in)
3.50.0-preview.0CosmosClientOptions.ThroughputBucket,RequestOptions.ThroughputBucket,CosmosClientBuilder.WithThroughputBucketOpen questions
Related
Microsoft.Azure.Cosmos/contracts/API_3.50.0-preview.0.txtthroughAPI_3.63.0-preview.1.txtHttpConstants.HttpHeaders.ThroughputBucketRMResources.ThroughputBucketingNotEnabled,RMResources.InvalidThroughputBuckets