Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
3db16fe
Code changes to introduce global_endpoint_manager.
kundadebdatta Nov 5, 2025
397d9c4
Updated global endpoint manager and location cache. Wiring complete.
kundadebdatta Nov 6, 2025
c877976
Added client_retry_ploicy. Added Moka Cache for Account Properties.
kundadebdatta Nov 8, 2025
857298d
Code changes to update client retry policy.
kundadebdatta Nov 11, 2025
245e8f8
Code changes to make on_before_request as an async invocation.
kundadebdatta Nov 11, 2025
894dec3
Code changes to add sub status code constants.
kundadebdatta Nov 12, 2025
ef0c9c1
Code changes to refactor refresh cache method.
kundadebdatta Nov 12, 2025
96a7930
Code changes to clean up.
kundadebdatta Nov 12, 2025
93c9d52
Code changes to validate cross regional retry. Added metadata retry p…
kundadebdatta Nov 13, 2025
48a544e
Code changes to add applicable endpoints
kundadebdatta Nov 13, 2025
fe9f64d
Code changes to apply clippy suggestions
kundadebdatta Nov 14, 2025
af12051
Code changes to fix formatting
kundadebdatta Nov 14, 2025
5d8e64f
Code changes to fix pipeline build failures.
kundadebdatta Nov 14, 2025
6939a94
Code changes to fix cargo format errors.
kundadebdatta Nov 14, 2025
e0dd470
Reverting change in gem
kundadebdatta Nov 14, 2025
79aa720
Updating location cache tests
kundadebdatta Nov 14, 2025
773d3eb
Code cleanup.
kundadebdatta Nov 14, 2025
f51f58c
Code changes to fix formatting errors.
kundadebdatta Nov 14, 2025
bcfe2d3
Merge branch 'main' into users/kundadebdatta/3175_build_global_endpoi…
kundadebdatta Nov 14, 2025
eb0fb74
Code changes to fix endpoint manager cache refresh.
kundadebdatta Nov 14, 2025
d661b42
Code changes to add more tests in location cache.
kundadebdatta Nov 14, 2025
6fa10ce
Code changes to add unit tests for endpoint manager and metadata retr…
kundadebdatta Nov 15, 2025
f53128e
Code changes to fix cargo format errors.
kundadebdatta Nov 17, 2025
96221c1
Code changes to add summary for client retry policy
kundadebdatta Nov 17, 2025
6552cdf
Code changes to address some of the review comments.
kundadebdatta Nov 17, 2025
6485325
Code changes to make substatus code optional.
kundadebdatta Nov 18, 2025
366a4ca
Code changes to add async_trait for wasm target.
kundadebdatta Nov 18, 2025
6924a31
Code changes to use enum dispatcher for retry policy selection.
kundadebdatta Nov 18, 2025
1d0385b
Code changes to add workspace dependency for moka.
kundadebdatta Nov 18, 2025
d31e40f
Revert "Code changes to add workspace dependency for moka."
kundadebdatta Nov 18, 2025
ea5b85c
Code changes to add workspace dependency for moka package
kundadebdatta Nov 18, 2025
c299901
Revert "Code changes to add workspace dependency for moka package"
kundadebdatta Nov 18, 2025
e398297
Adding cargo dependency to root cargo toml.
kundadebdatta Nov 19, 2025
5f9725a
Code changes to fix formatting errors.
kundadebdatta Nov 19, 2025
690295b
Code changes to fix spell checks
kundadebdatta Nov 19, 2025
2ec9e4f
Code changes to address copilot review comments.
kundadebdatta Nov 19, 2025
f2ca105
Code changes to revert to builder pattern.
kundadebdatta Nov 19, 2025
c40a466
Code changes to address review comments.
kundadebdatta Nov 20, 2025
01b0d76
Code changes to add code comment for refresh location. Removed Boxing…
kundadebdatta Nov 20, 2025
138c9ed
Code changes to add formatting fix.
kundadebdatta Nov 20, 2025
f3311e0
Code changes to fix cargo spell check.
kundadebdatta Nov 20, 2025
4459a19
Merge branch 'main' into users/kundadebdatta/3175_build_global_endpoi…
kundadebdatta Nov 20, 2025
285033a
Updating cargo lock
kundadebdatta Nov 20, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ wasm-bindgen-futures = "0.4"
wasm-bindgen-test = "0.3"
zerofrom = "0.1.5"
zip = { version = "4.0.0", default-features = false, features = ["deflate"] }
moka = { version = "0.12", features = ["future"] }

[workspace.lints.clippy]
large_futures = "deny"
Expand Down
1 change: 1 addition & 0 deletions eng/dict/crates.txt
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,4 @@ url
uuid
zerofrom
zip
moka
3 changes: 3 additions & 0 deletions sdk/cosmos/.dict.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ udfs
backoff
pluggable
cloneable
moka
substatus
retryable

# Cosmos' docs all use "Autoscale" as a single word, rather than a compound "AutoScale" or "Auto Scale"
autoscale
Expand Down
1 change: 1 addition & 0 deletions sdk/cosmos/azure_data_cosmos/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

### Features Added

- Added GlobalEndpointManager, LocationCache to support Cross Regional Retry.
- Added `continuation_token` to `PagerOptions` for methods that return a `Pager`.

### Breaking Changes
Expand Down
1 change: 1 addition & 0 deletions sdk/cosmos/azure_data_cosmos/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ serde_json.workspace = true
serde.workspace = true
tracing.workspace = true
url.workspace = true
moka.workspace = true

[dev-dependencies]
azure_identity.workspace = true
Expand Down
77 changes: 26 additions & 51 deletions sdk/cosmos/azure_data_cosmos/src/clients/container_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ use crate::{
DeleteContainerOptions, FeedPager, ItemOptions, PartitionKey, Query, ReplaceContainerOptions,
ThroughputOptions,
};
use std::sync::Arc;

use crate::cosmos_request::CosmosRequestBuilder;
use crate::cosmos_request::CosmosRequest;
use crate::operation_context::OperationType;
use azure_core::http::response::Response;
use serde::{de::DeserializeOwned, Serialize};
Expand All @@ -22,19 +23,19 @@ use serde::{de::DeserializeOwned, Serialize};
pub struct ContainerClient {
link: ResourceLink,
items_link: ResourceLink,
pipeline: CosmosPipeline,
pipeline: Arc<CosmosPipeline>,
}

impl ContainerClient {
pub(crate) fn new(
pipeline: CosmosPipeline,
pipeline: Arc<CosmosPipeline>,
database_link: &ResourceLink,
container_id: &str,
) -> Self {
let link = database_link
.feed(ResourceType::Containers)
.item(container_id);
let items_link = link.feed(ResourceType::Items);
let items_link = link.feed(ResourceType::Documents);

Self {
link,
Expand Down Expand Up @@ -65,13 +66,9 @@ impl ContainerClient {
) -> azure_core::Result<Response<ContainerProperties>> {
let options = options.unwrap_or_default();
let cosmos_request =
CosmosRequestBuilder::new(OperationType::Read, ResourceType::Containers).build()?;
CosmosRequest::builder(OperationType::Read, self.link.clone()).build()?;
self.pipeline
.send(
cosmos_request,
self.link.clone(),
options.method_options.context,
)
.send(cosmos_request, options.method_options.context)
.await
}

Expand Down Expand Up @@ -111,14 +108,11 @@ impl ContainerClient {
options: Option<ReplaceContainerOptions<'_>>,
) -> azure_core::Result<Response<ContainerProperties>> {
let options = options.unwrap_or_default();
let builder = CosmosRequestBuilder::new(OperationType::Replace, ResourceType::Containers);
let cosmos_request = builder.json(&properties).build()?;
let cosmos_request = CosmosRequest::builder(OperationType::Replace, self.link.clone())
.json(&properties)
.build()?;
self.pipeline
.send(
cosmos_request,
self.link.clone(),
options.method_options.context,
)
.send(cosmos_request, options.method_options.context)
.await
}

Expand Down Expand Up @@ -181,14 +175,10 @@ impl ContainerClient {
options: Option<DeleteContainerOptions<'_>>,
) -> azure_core::Result<Response<()>> {
let options = options.unwrap_or_default();
let builder = CosmosRequestBuilder::new(OperationType::Delete, ResourceType::Containers);
let cosmos_request = builder.build()?;
let cosmos_request =
CosmosRequest::builder(OperationType::Delete, self.link.clone()).build()?;
self.pipeline
.send(
cosmos_request,
self.link.clone(),
options.method_options.context,
)
.send(cosmos_request, options.method_options.context)
.await
}

Expand Down Expand Up @@ -264,19 +254,14 @@ impl ContainerClient {
options: Option<ItemOptions<'_>>,
) -> azure_core::Result<Response<()>> {
let options = options.clone().unwrap_or_default();
let builder = CosmosRequestBuilder::new(OperationType::Create, ResourceType::Items);
let cosmos_request = builder
let cosmos_request = CosmosRequest::builder(OperationType::Create, self.items_link.clone())
.headers(&options)
.json(&item)
.partition_key(partition_key.into())
.build()?;

self.pipeline
.send(
cosmos_request,
self.items_link.clone(),
options.method_options.context,
)
.send(cosmos_request, options.method_options.context)
.await
}

Expand Down Expand Up @@ -354,15 +339,14 @@ impl ContainerClient {
) -> azure_core::Result<Response<()>> {
let link = self.items_link.item(item_id);
let options = options.clone().unwrap_or_default();
let builder = CosmosRequestBuilder::new(OperationType::Replace, ResourceType::Items);
let cosmos_request = builder
let cosmos_request = CosmosRequest::builder(OperationType::Replace, link)
.headers(&options)
.json(&item)
.partition_key(partition_key.into())
.build()?;

self.pipeline
.send(cosmos_request, link, options.method_options.context)
.send(cosmos_request, options.method_options.context)
.await
}

Expand Down Expand Up @@ -441,19 +425,14 @@ impl ContainerClient {
options: Option<ItemOptions<'_>>,
) -> azure_core::Result<Response<()>> {
let options = options.clone().unwrap_or_default();
let builder = CosmosRequestBuilder::new(OperationType::Upsert, ResourceType::Items);
let cosmos_request = builder
let cosmos_request = CosmosRequest::builder(OperationType::Upsert, self.items_link.clone())
.headers(&options)
.json(&item)
.partition_key(partition_key.into())
.build()?;

self.pipeline
.send(
cosmos_request,
self.items_link.clone(),
options.method_options.context,
)
.send(cosmos_request, options.method_options.context)
.await
}

Expand Down Expand Up @@ -499,14 +478,13 @@ impl ContainerClient {
options.enable_content_response_on_write = true;

let link = self.items_link.item(item_id);
let builder = CosmosRequestBuilder::new(OperationType::Read, ResourceType::Items);
let cosmos_request = builder
let cosmos_request = CosmosRequest::builder(OperationType::Read, link)
.partition_key(partition_key.into())
.headers(&options)
.build()?;

self.pipeline
.send(cosmos_request, link, options.method_options.context)
.send(cosmos_request, options.method_options.context)
.await
}

Expand Down Expand Up @@ -538,15 +516,13 @@ impl ContainerClient {
) -> azure_core::Result<Response<()>> {
let link = self.items_link.item(item_id);
let options = options.clone().unwrap_or_default();

let builder = CosmosRequestBuilder::new(OperationType::Delete, ResourceType::Items);
let cosmos_request = builder
let cosmos_request = CosmosRequest::builder(OperationType::Delete, link)
.partition_key(partition_key.into())
.headers(&options)
.build()?;

self.pipeline
.send(cosmos_request, link, options.method_options.context)
.send(cosmos_request, options.method_options.context)
.await
}

Expand Down Expand Up @@ -614,15 +590,14 @@ impl ContainerClient {
) -> azure_core::Result<Response<()>> {
let options = options.clone().unwrap_or_default();
let link = self.items_link.item(item_id);
let builder = CosmosRequestBuilder::new(OperationType::Patch, ResourceType::Items);
let cosmos_request = builder
let cosmos_request = CosmosRequest::builder(OperationType::Patch, link)
.partition_key(partition_key.into())
.headers(&options)
.json(&patch)
.build()?;

self.pipeline
.send(cosmos_request, link, options.method_options.context)
.send(cosmos_request, options.method_options.context)
.await
}

Expand Down
Loading