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;