Skip to content

[Internal] DistributedTransactions: Refactors INTERNAL flag to PREVIEW for preview release#5911

Merged
Meghana-Palaparthi merged 3 commits into
mainfrom
users/Meghana-Palaparthi/dtx_internal_to_preview
May 29, 2026
Merged

[Internal] DistributedTransactions: Refactors INTERNAL flag to PREVIEW for preview release#5911
Meghana-Palaparthi merged 3 commits into
mainfrom
users/Meghana-Palaparthi/dtx_internal_to_preview

Conversation

@Meghana-Palaparthi
Copy link
Copy Markdown
Contributor

@Meghana-Palaparthi Meghana-Palaparthi commented May 28, 2026

Description

Changes the #if INTERNAL preprocessor directive to #if PREVIEW across all distributed transaction public-facing types and factory methods so they are exposed in preview builds.

Changes

  • DistributedTransaction, DistributedReadTransaction, DistributedWriteTransaction — class visibility
  • DistributedTransactionResponse, DistributedTransactionOperationResult, DistributedTransactionOperationResult<T> — class visibility
  • DistributedTransactionRequestOptions — class visibility
  • CosmosClient.CreateDistributedWriteTransaction() / CreateDistributedReadTransaction() — method visibility

Type of change

Please delete options that are not relevant.

  • [] Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • [] Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • [] This change requires a documentation update

Closing issues

To automatically close an issue: closes #IssueNumber

Changelog

  • I have added a changelog entry under ### Unreleased in changelog.md
    for the user-facing impact of this change.
  • [] No changelog entry is required because this PR is one of:
    documentation-only, test-only, CI / build-only, or a pure internal refactor
    with no observable customer impact.

…for preview release

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copy link
Copy Markdown

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All good!

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Meghana-Palaparthi Meghana-Palaparthi force-pushed the users/Meghana-Palaparthi/dtx_internal_to_preview branch from c935ffb to 9f7a4d5 Compare May 28, 2026 18:43
@Meghana-Palaparthi Meghana-Palaparthi changed the title [Internal] DistributedTransactions: Changes INTERNAL flag to PREVIEW for preview release [Internal] DistributedTransactions: Refactors INTERNAL flag to PREVIEW for preview release May 28, 2026
@Meghana-Palaparthi Meghana-Palaparthi marked this pull request as ready for review May 28, 2026 18:56
…ypes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Meghana-Palaparthi Meghana-Palaparthi enabled auto-merge (squash) May 29, 2026 19:03
@Meghana-Palaparthi Meghana-Palaparthi merged commit 60da561 into main May 29, 2026
33 checks passed
@Meghana-Palaparthi Meghana-Palaparthi deleted the users/Meghana-Palaparthi/dtx_internal_to_preview branch May 29, 2026 19:28
Meghana-Palaparthi added a commit that referenced this pull request Jun 2, 2026
## Release 3.61.0

### Version Changes
| Property | Previous | New |
|---|---|---|
| ClientOfficialVersion | 3.60.0 | 3.61.0 |
| ClientPreviewVersion | 3.61.0 | 3.62.0 |
| ClientPreviewSuffixVersion | preview.0 | preview.0 |

### Changelog (3.61.0 GA)

#### Features Added
- [5815](#5815) Read
Consistency Strategy: Adds hub region header for
LastCommittedSingleWriteRegion strategy.
- [5848](#5848)
VectorEmbeddingPolicy: Adds EmbeddingSource block to Embedding model
- [5867](#5867)
Diagnostics: Adds hedging detection API
- [5600](#5600) HPK:
Adds id to partition key when "/id" is the last path in partition key
definition.

#### Bugs Fixed
- [5827](#5827)
ChangeFeedEstimator: Change feed estimator threw ArgumentNullException
when an inmemory lease container was being used.
- [5910](#5910)
Upgraded Direct package to 3.43.2.
- [5910](#5910)
Direct: Fixed RNTBD thread-pool starvation by making
Dispatcher.OnIdleTimer asynchronous.

#### Other Changes
- [5887](#5887)
Direct: Documents that MaxTcpConnectionsPerEndpoint accepts any positive
value.

### Changelog (3.62.0-preview.0 - preview only)

#### Features Added
- [5838](#5838)
EmbeddingGenerator: Adds ICosmosEmbeddingGenerator client-wide
configuration (preview)
- [5911](#5911)
DistributedTransaction: Adds DistributedReadTransaction and
DistributedWriteTransaction APIs (preview)

### API Contract Diff (GA)
```diff
diff --git "a/Microsoft.Azure.Cosmos\\contracts\\API_3.60.0.txt" "b/Microsoft.Azure.Cosmos\\contracts\\API_3.61.0.txt"
index ad39f9b..767b792 100644
--- "a/Microsoft.Azure.Cosmos\\contracts\\API_3.60.0.txt"
+++ "b/Microsoft.Azure.Cosmos\\contracts\\API_3.61.0.txt"
@@ -434,7 +434,10 @@ namespace Microsoft.Azure.Cosmos
         public abstract IReadOnlyList<ValueTuple<string, Uri>> GetContactedRegions();
         public virtual int GetFailedRequestCount();
         public virtual ServerSideCumulativeMetrics GetQueryMetrics();
+        public virtual IReadOnlyList<RequestedRegion> GetRequestedRegions();
+        public virtual IReadOnlyList<string> GetRespondedRegions();
         public virtual Nullable<DateTime> GetStartTimeUtc();
+        public virtual bool HedgingStarted();
         public abstract override string ToString();
     }
     public class CosmosException : Exception, ICloneable
@@ -1033,6 +1036,28 @@ namespace Microsoft.Azure.Cosmos
         public const string WestUS2 = "West US 2";
         public const string WestUS3 = "West US 3";
     }
+    public struct RequestedRegion : IEquatable<RequestedRegion>
+    {
+        public RequestedRegion(string regionName, RequestedRegionReason reason);
+        public RequestedRegionReason Reason { get; }
+        public string RegionName { get; }
+        public bool Equals(RequestedRegion other);
+        public override bool Equals(object obj);
+        public override int GetHashCode();
+        public override string ToString();
+    }
+    public enum RequestedRegionReason : byte
+    {
+        CircuitBreakerProbe = (byte)6,
+        Hedging = (byte)4,
+        Initial = (byte)1,
+        OperationRetry = (byte)2,
+        RegionFailover = (byte)5,
+        TransportRetry = (byte)3,
+        Unknown = (byte)0,
+    }
     public abstract class RequestHandler
     {
         protected RequestHandler();

```

### API Contract Diff (Preview)
```diff
diff --git "a/Microsoft.Azure.Cosmos\\contracts\\API_3.61.0-preview.0.txt" "b/Microsoft.Azure.Cosmos\\contracts\\API_3.62.0-preview.0.txt"
index efd0a07..02f51c1 100644
--- "a/Microsoft.Azure.Cosmos\\contracts\\API_3.61.0-preview.0.txt"
+++ "b/Microsoft.Azure.Cosmos\\contracts\\API_3.62.0-preview.0.txt"
@@ -367,6 +367,7 @@ namespace Microsoft.Azure.Cosmos
         public CosmosClient(string connectionString, CosmosClientOptions clientOptions=null);
         public CosmosClient(string accountEndpoint, string authKeyOrResourceToken, CosmosClientOptions clientOptions=null);
         public virtual CosmosClientOptions ClientOptions { get; }
+        public virtual ICosmosEmbeddingGenerator EmbeddingGenerator { get; }
         public virtual Uri Endpoint { get; }
         public virtual CosmosResponseFactory ResponseFactory { get; }
         public static Task<CosmosClient> CreateAndInitializeAsync(string accountEndpoint, AzureKeyCredential authKeyOrResourceTokenCredential, IReadOnlyList<ValueTuple<string, string>> containers, CosmosClientOptions cosmosClientOptions=null, CancellationToken cancellationToken=default(CancellationToken));
@@ -378,6 +379,8 @@ namespace Microsoft.Azure.Cosmos
         public virtual Task<DatabaseResponse> CreateDatabaseIfNotExistsAsync(string id, ThroughputProperties throughputProperties, RequestOptions requestOptions=null, CancellationToken cancellationToken=default(CancellationToken));
         public virtual Task<DatabaseResponse> CreateDatabaseIfNotExistsAsync(string id, Nullable<int> throughput=default(Nullable<int>), RequestOptions requestOptions=null, CancellationToken cancellationToken=default(CancellationToken));
         public virtual Task<ResponseMessage> CreateDatabaseStreamAsync(DatabaseProperties databaseProperties, Nullable<int> throughput=default(Nullable<int>), RequestOptions requestOptions=null, CancellationToken cancellationToken=default(CancellationToken));
+        public virtual DistributedReadTransaction CreateDistributedReadTransaction();
+        public virtual DistributedWriteTransaction CreateDistributedWriteTransaction();
         public void Dispose();
         protected virtual void Dispose(bool disposing);
         public virtual Container GetContainer(string databaseId, string containerId);
@@ -401,6 +404,7 @@ namespace Microsoft.Azure.Cosmos
         public Nullable<ConsistencyLevel> ConsistencyLevel { get; set; }
         public CosmosClientTelemetryOptions CosmosClientTelemetryOptions { get; set; }
         public Collection<RequestHandler> CustomHandlers { get; }
+        public ICosmosEmbeddingGenerator EmbeddingGenerator { get; set; }
         public Nullable<bool> EnableContentResponseOnWrite { get; set; }
         public bool EnableRemoteRegionPreferredForSessionRetry { get; set; }
         public bool EnableTcpConnectionEndpointRediscovery { get; set; }
@@ -511,9 +515,19 @@ namespace Microsoft.Azure.Cosmos
         public abstract IReadOnlyList<ValueTuple<string, Uri>> GetContactedRegions();
         public virtual int GetFailedRequestCount();
         public virtual ServerSideCumulativeMetrics GetQueryMetrics();
+        public virtual IReadOnlyList<RequestedRegion> GetRequestedRegions();
+        public virtual IReadOnlyList<string> GetRespondedRegions();
         public virtual Nullable<DateTime> GetStartTimeUtc();
+        public virtual bool HedgingStarted();
         public abstract override string ToString();
     }
+    public sealed class CosmosEmbeddingResult
+    {
+        public CosmosEmbeddingResult(IReadOnlyList<ReadOnlyMemory<float>> vectors, Nullable<int> totalTokens=default(Nullable<int>), Nullable<TimeSpan> latency=default(Nullable<TimeSpan>));
+        public Nullable<TimeSpan> Latency { get; }
+        public Nullable<int> TotalTokens { get; }
+        public IReadOnlyList<ReadOnlyMemory<float>> Vectors { get; }
+    }
     public class CosmosException : Exception, ICloneable
     {
         public CosmosException(string message, HttpStatusCode statusCode, int subStatusCode, string activityId, double requestCharge);
@@ -668,6 +682,69 @@ namespace Microsoft.Azure.Cosmos
         DotProduct = 2,
         Euclidean = 0,
     }
+    public abstract class DistributedReadTransaction : DistributedTransaction
+    {
+        protected DistributedReadTransaction();
+        public abstract DistributedReadTransaction ReadItem(Container container, PartitionKey partitionKey, string id, DistributedTransactionRequestOptions requestOptions=null);
+    }
+    public abstract class DistributedTransaction
+    {
+        protected DistributedTransaction();
+        public abstract Task<DistributedTransactionResponse> CommitTransactionAsync(CancellationToken cancellationToken=default(CancellationToken));
+    }
+    public class DistributedTransactionOperationResult
+    {
+        public virtual string ETag { get; }
+        public virtual int Index { get; }
+        public virtual bool IsSuccessStatusCode { get; }
+        public virtual double RequestCharge { get; }
+        public virtual Stream ResourceStream { get; }
+        public virtual HttpStatusCode StatusCode { get; }
+    }
+    public class DistributedTransactionOperationResult<T> : DistributedTransactionOperationResult
+    {
+        protected DistributedTransactionOperationResult();
+        public virtual T Resource { get; set; }
+    }
+    public class DistributedTransactionRequestOptions : RequestOptions
+    {
+        public DistributedTransactionRequestOptions();
+        public string SessionToken { get; set; }
+    }
+    public class DistributedTransactionResponse : IDisposable, IEnumerable, IEnumerable<DistributedTransactionOperationResult>, IReadOnlyCollection<DistributedTransactionOperationResult>, IReadOnlyList<DistributedTransactionOperationResult>
+    {
+        protected DistributedTransactionResponse();
+        public virtual string ActivityId { get; }
+        public virtual int Count { get; }
+        public virtual CosmosDiagnostics Diagnostics { get; }
+        public virtual string DiagnosticString { get; }
+        public virtual string ErrorMessage { get; }
+        public virtual Headers Headers { get; }
+        public virtual Guid IdempotencyToken { get; }
+        public virtual bool IsRetriable { get; }
+        public virtual bool IsSuccessStatusCode { get; }
+        public virtual DistributedTransactionOperationResult this[int index] { get; }
+        public virtual double RequestCharge { get; }
+        public virtual HttpStatusCode StatusCode { get; }
+        public void Dispose();
+        protected virtual void Dispose(bool disposing);
+        public virtual IEnumerator<DistributedTransactionOperationResult> GetEnumerator();
+        public virtual DistributedTransactionOperationResult<T> GetOperationResultAtIndex<T>(int index);
+        IEnumerator System.Collections.IEnumerable.GetEnumerator();
+    }
+    public abstract class DistributedWriteTransaction : DistributedTransaction
+    {
+        protected DistributedWriteTransaction();
+        public abstract DistributedWriteTransaction CreateItemStream(Container container, PartitionKey partitionKey, string id, Stream streamPayload, DistributedTransactionRequestOptions requestOptions=null);
+        public abstract DistributedWriteTransaction CreateItem<T>(Container container, PartitionKey partitionKey, string id, T resource, DistributedTransactionRequestOptions requestOptions=null);
+        public abstract DistributedWriteTransaction DeleteItem(Container container, PartitionKey partitionKey, string id, DistributedTransactionRequestOptions requestOptions=null);
+        public abstract DistributedWriteTransaction PatchItem(Container container, PartitionKey partitionKey, string id, IReadOnlyList<PatchOperation> patchOperations, DistributedTransactionRequestOptions requestOptions=null);
+        public abstract DistributedWriteTransaction PatchItemStream(Container container, PartitionKey partitionKey, string id, Stream streamPayload, DistributedTransactionRequestOptions requestOptions=null);
+        public abstract DistributedWriteTransaction ReplaceItemStream(Container container, PartitionKey partitionKey, string id, Stream streamPayload, DistributedTransactionRequestOptions requestOptions=null);
+        public abstract DistributedWriteTransaction ReplaceItem<T>(Container container, PartitionKey partitionKey, string id, T resource, DistributedTransactionRequestOptions requestOptions=null);
+        public abstract DistributedWriteTransaction UpsertItemStream(Container container, PartitionKey partitionKey, string id, Stream streamPayload, DistributedTransactionRequestOptions requestOptions=null);
+        public abstract DistributedWriteTransaction UpsertItem<T>(Container container, PartitionKey partitionKey, string id, T resource, DistributedTransactionRequestOptions requestOptions=null);
+    }
     public class Embedding : IEquatable<Embedding>
     {
         public Embedding();
@@ -809,6 +886,10 @@ namespace Microsoft.Azure.Cosmos
         IEnumerator System.Collections.IEnumerable.GetEnumerator();
         public virtual bool TryGetValue(string headerName, out string value);
     }
+    public interface ICosmosEmbeddingGenerator
+    {
+        Task<CosmosEmbeddingResult> GenerateEmbeddingsAsync(IReadOnlyList<string> texts, string endpoint, string deploymentName, int dimensions, CancellationToken cancellationToken=default(CancellationToken));
+    }
     public sealed class IncludedPath
     {
         public IncludedPath();
@@ -1157,6 +1238,28 @@ namespace Microsoft.Azure.Cosmos
         public const string WestUS2 = "West US 2";
         public const string WestUS3 = "West US 3";
     }
+    public struct RequestedRegion : IEquatable<RequestedRegion>
+    {
+        public RequestedRegion(string regionName, RequestedRegionReason reason);
+        public RequestedRegionReason Reason { get; }
+        public string RegionName { get; }
+        public bool Equals(RequestedRegion other);
+        public override bool Equals(object obj);
+        public override int GetHashCode();
+        public override string ToString();
+    }
+    public enum RequestedRegionReason : byte
+    {
+        CircuitBreakerProbe = (byte)6,
+        Hedging = (byte)4,
+        Initial = (byte)1,
+        OperationRetry = (byte)2,
+        RegionFailover = (byte)5,
+        TransportRetry = (byte)3,
+        Unknown = (byte)0,
+    }
     public abstract class RequestHandler
     {
         protected RequestHandler();
@@ -1526,6 +1629,7 @@ namespace Microsoft.Azure.Cosmos.Fluent
         public CosmosClientBuilder WithContentResponseOnWrite(bool contentResponseOnWrite);
         public CosmosClientBuilder WithCustomAccountEndpoints(IEnumerable<Uri> customAccountEndpoints);
         public CosmosClientBuilder WithCustomSerializer(CosmosSerializer cosmosJsonSerializer);
+        public CosmosClientBuilder WithEmbeddingGenerator(ICosmosEmbeddingGenerator embeddingGenerator);
         public CosmosClientBuilder WithEnableRemoteRegionPreferredForSessionRetry(bool enableRemoteRegionPreferredForSessionRetry);
         public CosmosClientBuilder WithFaultInjection(IFaultInjector faultInjector);
         public CosmosClientBuilder WithHttpClientFactory(Func<HttpClient> httpClientFactory);

```

### Checklist
- [X] Changelog entries reviewed by team
- [ ] API contract diff reviewed by Kiran and Kirill
- [ ] Preview APIs reviewed (email sent to
azurecosmossdkdotnet@microsoft.com)
- [ ] Kiran sign-off obtained

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants