From ae54bbb5a44fc8c60c5fe33c3ed3240acd736768 Mon Sep 17 00:00:00 2001 From: Meghana-Palaparthi Date: Thu, 26 Feb 2026 15:33:47 -0600 Subject: [PATCH] Upgrade direct version to 3.42.1 and ingest DTS related changes --- Directory.Build.props | 2 +- .../DistributedTransaction.cs | 2 +- .../DistributedTransactionCommitter.cs | 14 +++++++++----- .../DistributedTransactionConstants.cs | 6 ------ .../DistributedTransactionResponse.cs | 4 +--- Microsoft.Azure.Cosmos/src/GatewayStoreModel.cs | 15 +++------------ .../src/Handler/TransportHandler.cs | 6 +----- .../DistributedTransactionE2ETests.cs | 5 +++-- 8 files changed, 19 insertions(+), 35 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index c2eb610e0f..befacdace9 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -3,7 +3,7 @@ 3.57.0 3.58.0 preview.0 - 3.42.0 + 3.42.2 1.0.0 beta.0 2.0.5 diff --git a/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransaction.cs b/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransaction.cs index 806d2a1548..7a9542c029 100644 --- a/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransaction.cs +++ b/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransaction.cs @@ -23,6 +23,6 @@ abstract class DistributedTransaction /// /// A to observe while waiting for the task to complete. /// A containing a that represents the result of the transaction. - public abstract Task CommitTransactionAsync(CancellationToken cancellationToken); + public abstract Task CommitTransactionAsync(CancellationToken cancellationToken = default); } } diff --git a/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransactionCommitter.cs b/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransactionCommitter.cs index b8db5aebe5..838697efe0 100644 --- a/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransactionCommitter.cs +++ b/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransactionCommitter.cs @@ -61,7 +61,7 @@ private async Task ExecuteCommitAsync( using (MemoryStream bodyStream = serverRequest.TransferBodyStream()) { ResponseMessage responseMessage = await this.clientContext.ProcessResourceOperationStreamAsync( - resourceUri: DistributedTransactionConstants.EndpointPath, + resourceUri: DistributedTransactionCommitter.GetResourceUri(), resourceType: ResourceType.DistributedTransactionBatch, operationType: OperationType.CommitDistributedTransaction, requestOptions: null, @@ -86,13 +86,17 @@ private async Task ExecuteCommitAsync( } } + private static string GetResourceUri() + { + return Paths.OperationsPathSegment + "/" + Paths.Operations_Dtc; + } + private static void EnrichRequestMessage(RequestMessage requestMessage, DistributedTransactionServerRequest serverRequest) { // Set DTC-specific headers - //TODO: update to headers in HttpConstants.HttpHeaders - requestMessage.Headers.Add(DistributedTransactionConstants.IdempotencyTokenHeader, serverRequest.IdempotencyToken.ToString()); - requestMessage.Headers.Add(DistributedTransactionConstants.OperationTypeHeader, requestMessage.OperationType.ToString()); - requestMessage.Headers.Add(DistributedTransactionConstants.ResourceTypeHeader, requestMessage.ResourceType.ToString()); + requestMessage.Headers.Add(HttpConstants.HttpHeaders.IdempotencyToken, serverRequest.IdempotencyToken.ToString()); + requestMessage.Headers.Add(HttpConstants.HttpHeaders.OperationType, requestMessage.OperationType.ToString()); + requestMessage.Headers.Add(HttpConstants.HttpHeaders.ResourceType, requestMessage.ResourceType.ToString()); requestMessage.UseGatewayMode = true; } diff --git a/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransactionConstants.cs b/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransactionConstants.cs index eed7be7e27..218b1f2c9f 100644 --- a/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransactionConstants.cs +++ b/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransactionConstants.cs @@ -8,12 +8,6 @@ namespace Microsoft.Azure.Cosmos internal static class DistributedTransactionConstants { - public const string EndpointPath = "/operations/dtc"; - public const string AuthorizationResourceType = "databaseaccount"; - public const string IdempotencyTokenHeader = "x-ms-cosmos-idempotency-token"; - public const string OperationTypeHeader = "x-ms-cosmos-operation-type"; - public const string ResourceTypeHeader = "x-ms-cosmos-resource-type"; - public static bool IsDistributedTransactionRequest(OperationType operationType, ResourceType resourceType) { return operationType == OperationType.CommitDistributedTransaction diff --git a/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransactionResponse.cs b/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransactionResponse.cs index 490c782d9b..20a39ea01e 100644 --- a/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransactionResponse.cs +++ b/Microsoft.Azure.Cosmos/src/DistributedTransaction/DistributedTransactionResponse.cs @@ -25,8 +25,6 @@ namespace Microsoft.Azure.Cosmos #endif class DistributedTransactionResponse : IReadOnlyList, IDisposable { - private const string IdempotencyTokenHeader = "x-ms-dtc-operation-id"; - private List results; private bool isDisposed; @@ -272,7 +270,7 @@ protected virtual void Dispose(bool disposing) private static Guid GetIdempotencyTokenFromHeaders(Headers headers, Guid fallbackToken) { if (headers != null && - headers.TryGetValue(IdempotencyTokenHeader, out string tokenValue) && + headers.TryGetValue(HttpConstants.HttpHeaders.IdempotencyToken, out string tokenValue) && Guid.TryParse(tokenValue, out Guid idempotencyToken)) { return idempotencyToken; diff --git a/Microsoft.Azure.Cosmos/src/GatewayStoreModel.cs b/Microsoft.Azure.Cosmos/src/GatewayStoreModel.cs index 5f2dd7220c..3123eed0ba 100644 --- a/Microsoft.Azure.Cosmos/src/GatewayStoreModel.cs +++ b/Microsoft.Azure.Cosmos/src/GatewayStoreModel.cs @@ -126,18 +126,9 @@ await GatewayStoreModel.ApplySessionTokenAsync( this.thinClientStoreClient != null && GatewayStoreModel.IsOperationSupportedByThinClient(request); - Uri physicalAddress; - - if (DistributedTransactionConstants.IsDistributedTransactionRequest(request.OperationType, request.ResourceType)) - { - physicalAddress = new Uri(this.endpointManager.ResolveServiceEndpoint(request), DistributedTransactionConstants.EndpointPath); - } - else - { - physicalAddress = ThinClientStoreClient.IsFeedRequest(request.OperationType) - ? this.GetFeedUri(request) - : this.GetEntityUri(request); - } + Uri physicalAddress = ThinClientStoreClient.IsFeedRequest(request.OperationType) + ? this.GetFeedUri(request) + : this.GetEntityUri(request); if (canUseThinClient) { diff --git a/Microsoft.Azure.Cosmos/src/Handler/TransportHandler.cs b/Microsoft.Azure.Cosmos/src/Handler/TransportHandler.cs index c7f84ed1ae..f7d865693c 100644 --- a/Microsoft.Azure.Cosmos/src/Handler/TransportHandler.cs +++ b/Microsoft.Azure.Cosmos/src/Handler/TransportHandler.cs @@ -96,14 +96,10 @@ internal async Task ProcessMessageAsync( ClientSideRequestStatisticsTraceDatum clientSideRequestStatisticsTraceDatum = new ClientSideRequestStatisticsTraceDatum(DateTime.UtcNow, request.Trace); serviceRequest.RequestContext.ClientRequestStatistics = clientSideRequestStatisticsTraceDatum; - string resourceTypeForAuth = DistributedTransactionConstants.IsDistributedTransactionRequest(request.OperationType, request.ResourceType) - ? DistributedTransactionConstants.AuthorizationResourceType - : PathsHelper.GetResourcePath(request.ResourceType); - //TODO: extract auth into a separate handler string authorization = await ((ICosmosAuthorizationTokenProvider)this.client.DocumentClient).GetUserAuthorizationTokenAsync( serviceRequest.ResourceAddress, - resourceTypeForAuth, + PathsHelper.GetResourcePath(request.ResourceType), request.Method.ToString(), serviceRequest.Headers, AuthorizationTokenType.PrimaryMasterKey, diff --git a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/DistributedTransaction/DistributedTransactionE2ETests.cs b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/DistributedTransaction/DistributedTransactionE2ETests.cs index abc5ae55a3..b05f39288e 100644 --- a/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/DistributedTransaction/DistributedTransactionE2ETests.cs +++ b/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/DistributedTransaction/DistributedTransactionE2ETests.cs @@ -13,13 +13,14 @@ namespace Microsoft.Azure.Cosmos.SDK.EmulatorTests using System.Threading; using System.Threading.Tasks; using Microsoft.Azure.Cosmos; + using Microsoft.Azure.Documents; using Microsoft.VisualStudio.TestTools.UnitTesting; - using OperationType = Documents.OperationType; + using PartitionKey = Cosmos.PartitionKey; [TestClass] public class DistributedTransactionE2ETests : BaseCosmosClientHelper { - private const string IdempotencyTokenHeader = "x-ms-cosmos-idempotency-token"; + private const string IdempotencyTokenHeader = HttpConstants.HttpHeaders.IdempotencyToken; private const string PartitionKeyPath = "/pk"; private Container container;