From b838eb105b0d6861e4bdf93ef334e647ca4c1e71 Mon Sep 17 00:00:00 2001 From: Matias Quaranta Date: Fri, 28 Apr 2023 11:31:01 -0700 Subject: [PATCH 1/5] Adding header and value --- sdk/data/azcosmos/cosmos_headers.go | 1 + sdk/data/azcosmos/sdk_capabilities.go | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 sdk/data/azcosmos/sdk_capabilities.go diff --git a/sdk/data/azcosmos/cosmos_headers.go b/sdk/data/azcosmos/cosmos_headers.go index d054bd652b93..5c8ea72c48bb 100644 --- a/sdk/data/azcosmos/cosmos_headers.go +++ b/sdk/data/azcosmos/cosmos_headers.go @@ -33,6 +33,7 @@ const ( cosmosHeaderIsBatchRequest string = "x-ms-cosmos-is-batch-request" cosmosHeaderIsBatchAtomic string = "x-ms-cosmos-batch-atomic" cosmosHeaderIsBatchOrdered string = "x-ms-cosmos-batch-ordered" + cosmosHeaderSDKSupportedCapabilities string = "x-ms-cosmos-sdk-supportedcapabilities" headerXmsDate string = "x-ms-date" headerAuthorization string = "Authorization" headerContentType string = "Content-Type" diff --git a/sdk/data/azcosmos/sdk_capabilities.go b/sdk/data/azcosmos/sdk_capabilities.go new file mode 100644 index 000000000000..036572d06019 --- /dev/null +++ b/sdk/data/azcosmos/sdk_capabilities.go @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package azcosmos + +import "strconv" + +type supportedCapabilities uint64 + +const ( + supportedCapabilitiesNone supportedCapabilities = 0 + supportedCapabilitiesPartitionMerge supportedCapabilities = 1 << iota +) + +var supportedCapabilitiesHeaderValue = supportedCapabilitiesAsString() + +func supportedCapabilitiesAsString() string { + supported := supportedCapabilitiesNone + supported |= supportedCapabilitiesPartitionMerge + return strconv.FormatUint(uint64(supported), 10) +} \ No newline at end of file From 98394286d1a2c179d04f4708f6edb5b4061a6134 Mon Sep 17 00:00:00 2001 From: Matias Quaranta Date: Fri, 28 Apr 2023 11:31:07 -0700 Subject: [PATCH 2/5] Wiring and tests --- sdk/data/azcosmos/cosmos_client.go | 1 + sdk/data/azcosmos/cosmos_client_test.go | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/sdk/data/azcosmos/cosmos_client.go b/sdk/data/azcosmos/cosmos_client.go index 94c455aed1e4..41807ab416e0 100644 --- a/sdk/data/azcosmos/cosmos_client.go +++ b/sdk/data/azcosmos/cosmos_client.go @@ -395,6 +395,7 @@ func (c *Client) createRequest( req.Raw().Header.Set(headerXmsDate, time.Now().UTC().Format(http.TimeFormat)) req.Raw().Header.Set(headerXmsVersion, "2020-11-05") + req.Raw().Header.Set(cosmosHeaderSDKSupportedCapabilities, supportedCapabilitiesHeaderValue) req.SetOperationValue(operationContext) diff --git a/sdk/data/azcosmos/cosmos_client_test.go b/sdk/data/azcosmos/cosmos_client_test.go index f33e730722a2..fff656c5d625 100644 --- a/sdk/data/azcosmos/cosmos_client_test.go +++ b/sdk/data/azcosmos/cosmos_client_test.go @@ -258,6 +258,10 @@ func TestCreateRequest(t *testing.T) { t.Errorf("Expected %v, but got %v", "2020-11-05", req.Raw().Header.Get(headerXmsVersion)) } + if req.Raw().Header.Get(cosmosHeaderSDKSupportedCapabilities) != supportedCapabilitiesHeaderValue{ + t.Errorf("Expected %v, but got %v", supportedCapabilitiesHeaderValue, req.Raw().Header.Get(cosmosHeaderSDKSupportedCapabilities)) + } + opValue := pipelineRequestOptions{} if !req.OperationValue(&opValue) { t.Error("Expected to find operation value") From dc38a31236290146d731def72d7926d3fff5e7b4 Mon Sep 17 00:00:00 2001 From: Matias Quaranta Date: Fri, 28 Apr 2023 11:33:53 -0700 Subject: [PATCH 3/5] format --- sdk/data/azcosmos/cosmos_client_test.go | 2 +- sdk/data/azcosmos/sdk_capabilities.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/data/azcosmos/cosmos_client_test.go b/sdk/data/azcosmos/cosmos_client_test.go index fff656c5d625..d93f4ca93d7c 100644 --- a/sdk/data/azcosmos/cosmos_client_test.go +++ b/sdk/data/azcosmos/cosmos_client_test.go @@ -258,7 +258,7 @@ func TestCreateRequest(t *testing.T) { t.Errorf("Expected %v, but got %v", "2020-11-05", req.Raw().Header.Get(headerXmsVersion)) } - if req.Raw().Header.Get(cosmosHeaderSDKSupportedCapabilities) != supportedCapabilitiesHeaderValue{ + if req.Raw().Header.Get(cosmosHeaderSDKSupportedCapabilities) != supportedCapabilitiesHeaderValue { t.Errorf("Expected %v, but got %v", supportedCapabilitiesHeaderValue, req.Raw().Header.Get(cosmosHeaderSDKSupportedCapabilities)) } diff --git a/sdk/data/azcosmos/sdk_capabilities.go b/sdk/data/azcosmos/sdk_capabilities.go index 036572d06019..5df59ee5de42 100644 --- a/sdk/data/azcosmos/sdk_capabilities.go +++ b/sdk/data/azcosmos/sdk_capabilities.go @@ -18,4 +18,4 @@ func supportedCapabilitiesAsString() string { supported := supportedCapabilitiesNone supported |= supportedCapabilitiesPartitionMerge return strconv.FormatUint(uint64(supported), 10) -} \ No newline at end of file +} From b86302fbc9ac7916de7452f01d08dc2b3469bd6e Mon Sep 17 00:00:00 2001 From: Matias Quaranta Date: Fri, 28 Apr 2023 11:38:11 -0700 Subject: [PATCH 4/5] Fixing value --- sdk/data/azcosmos/sdk_capabilities.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/data/azcosmos/sdk_capabilities.go b/sdk/data/azcosmos/sdk_capabilities.go index 5df59ee5de42..71157b5fed27 100644 --- a/sdk/data/azcosmos/sdk_capabilities.go +++ b/sdk/data/azcosmos/sdk_capabilities.go @@ -9,7 +9,7 @@ type supportedCapabilities uint64 const ( supportedCapabilitiesNone supportedCapabilities = 0 - supportedCapabilitiesPartitionMerge supportedCapabilities = 1 << iota + supportedCapabilitiesPartitionMerge supportedCapabilities = 1 << 0 ) var supportedCapabilitiesHeaderValue = supportedCapabilitiesAsString() From 478854f898e39cb28393aff64e72f54ac4b2adb7 Mon Sep 17 00:00:00 2001 From: Matias Quaranta Date: Fri, 28 Apr 2023 11:45:18 -0700 Subject: [PATCH 5/5] change log --- sdk/data/azcosmos/CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sdk/data/azcosmos/CHANGELOG.md b/sdk/data/azcosmos/CHANGELOG.md index 951442859e4d..f4652730f572 100644 --- a/sdk/data/azcosmos/CHANGELOG.md +++ b/sdk/data/azcosmos/CHANGELOG.md @@ -2,6 +2,9 @@ ## 0.3.5 (2023-05-09) +### Features Added +* Added support for accounts with [merge support](https://aka.ms/cosmosdbsdksupportformerge) enabled + ### Bugs Fixed * Fixed unmarshalling error when using projections in value queries