Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<ClientOfficialVersion>3.53.1</ClientOfficialVersion>
<ClientPreviewVersion>3.54.0</ClientPreviewVersion>
<ClientPreviewSuffixVersion>preview.1</ClientPreviewSuffixVersion>
<DirectVersion>3.40.3</DirectVersion>
<DirectVersion>3.41.0</DirectVersion>
<FaultInjectionVersion>1.0.0</FaultInjectionVersion>
<FaultInjectionSuffixVersion>beta.0</FaultInjectionSuffixVersion>
<EncryptionOfficialVersion>2.0.5</EncryptionOfficialVersion>
Expand Down
5 changes: 4 additions & 1 deletion Microsoft.Azure.Cosmos/src/DocumentClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6778,6 +6778,8 @@ private void InitializeDirectConnectivity(IStoreClientFactory storeClientFactory

private void CreateStoreModel(bool subscribeRntbdStatus)
{
AccountConfigurationProperties accountConfigurationProperties = new (EnableNRegionSynchronousCommit: this.accountServiceConfiguration.AccountProperties.EnableNRegionSynchronousCommit);

//EnableReadRequestsFallback, if not explicity set on the connection policy,
//is false if the account's consistency is bounded staleness,
//and true otherwise.
Expand All @@ -6792,7 +6794,8 @@ private void CreateStoreModel(bool subscribeRntbdStatus)
this.UseMultipleWriteLocations && (this.accountServiceConfiguration.DefaultConsistencyLevel != Documents.ConsistencyLevel.Strong),
true,
enableReplicaValidation: this.isReplicaAddressValidationEnabled,
sessionRetryOptions: this.ConnectionPolicy.SessionRetryOptions);
sessionRetryOptions: this.ConnectionPolicy.SessionRetryOptions,
accountConfigurationProperties: accountConfigurationProperties);

if (subscribeRntbdStatus)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -269,5 +269,7 @@ private IDictionary<string, object> QueryStringToDictConverter()
[JsonExtensionData]
internal IDictionary<string, JToken> AdditionalProperties { get; set; }

[JsonProperty(PropertyName = Constants.Properties.EnableNRegionSynchronousCommit, NullValueHandling = NullValueHandling.Ignore)]
internal bool EnableNRegionSynchronousCommit { get; set; }
}
}
3 changes: 2 additions & 1 deletion Microsoft.Azure.Cosmos/src/ThinClientTransportSerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ public static async Task<Stream> SerializeProxyRequestAsync(
activityId,
bufferProvider.Provider,
accountName,
out _,
accountName,
Comment thread
ananth7592 marked this conversation as resolved.
Comment thread
ananth7592 marked this conversation as resolved.
out _,
out _);

int length = serializedRequest.RequestSize;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,10 @@ public void Visit(StoreResult storeResult)
this.WriteStringValueOrNull(storeResult.PartitionKeyRangeId);

this.jsonWriter.WriteFieldName(nameof(storeResult.GlobalCommittedLSN));
this.jsonWriter.WriteNumberValue(storeResult.GlobalCommittedLSN);
this.jsonWriter.WriteNumberValue(storeResult.GlobalCommittedLSN);

this.jsonWriter.WriteFieldName(nameof(storeResult.GlobalNRegionCommittedGLSN));
this.jsonWriter.WriteNumberValue(storeResult.GlobalNRegionCommittedGLSN);

this.jsonWriter.WriteFieldName(nameof(storeResult.ItemLSN));
this.jsonWriter.WriteNumberValue(storeResult.ItemLSN);
Expand Down Expand Up @@ -453,7 +456,7 @@ public void Visit(StoreResult storeResult)

this.jsonWriter.WriteFieldName("TransportException");
TransportException transportException = storeResult.Exception?.InnerException as TransportException;
this.WriteStringValueOrNull(transportException?.Message);
this.WriteStringValueOrNull(transportException?.Message);

this.jsonWriter.WriteObjectEnd();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,18 @@ namespace Microsoft.Azure.Cosmos.SDK.EmulatorTests
using System.Globalization;
using System.Net;
using System.Net.Http;
using System.Net.Security;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure.Cosmos.Common;
using Microsoft.Azure.Cosmos.Internal;
using Microsoft.Azure.Cosmos.Linq;
using Microsoft.Azure.Cosmos.Query.Core.QueryPlan;
using Microsoft.Azure.Cosmos.Tests;
using Microsoft.Azure.Cosmos.Tracing;
using Microsoft.Azure.Cosmos.Utils;
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;

Expand Down Expand Up @@ -272,6 +276,112 @@ private void TestRetryOnThrottled(int? numberOfRetries)
Assert.IsTrue(throttled);
}

[TestMethod]
[DataRow(false, DisplayName = "NRegion Synchronous commit is disabled for the account")]
[DataRow(true, DisplayName = "NRegion Synchronous commit is enabled for the account")]
public void EnableNRegionSynchronousCommit_PassedToStoreClient(bool nRegionCommitEnabled)
{

StoreClient storeClient = new StoreClient(
new Mock<IAddressResolver>().Object,
new SessionContainer(string.Empty),
new Mock<IServiceConfigurationReader>().Object,
new Mock<IAuthorizationTokenProvider>().Object,
Protocol.Tcp,
new Mock<TransportClient>().Object);
// Arrange
Mock<IStoreClientFactory> mockStoreClientFactory = new Mock<IStoreClientFactory>();
mockStoreClientFactory.Setup(f => f.CreateStoreClient(
It.IsAny<IAddressResolver>(),
It.IsAny<ISessionContainer>(),
It.IsAny<IServiceConfigurationReader>(),
It.IsAny<IAuthorizationTokenProvider>(),
It.IsAny<bool>(),
It.IsAny<bool>(),
It.IsAny<bool>(),
It.IsAny<bool>(),
It.IsAny<bool>(),
It.IsAny<bool>(),
It.IsAny<AccountConfigurationProperties>(),
It.IsAny<ISessionRetryOptions>()
)).Returns(storeClient);

DocumentClient documentClient = new DocumentClient(
new Uri("https://localhost:8081"),
new Mock<AuthorizationTokenProvider>().Object,
new EventHandler<SendingRequestEventArgs>((s, e) => { }),
new ConnectionPolicy(),
null, // desiredConsistencyLevel
null, // serializerSettings
ApiType.None,
new EventHandler<ReceivedResponseEventArgs>((s, e) => { }),
null, // handler
new Mock<ISessionContainer>().Object,
null, // enableCpuMonitor
new Func<TransportClient, TransportClient>(tc => tc),
mockStoreClientFactory.Object,
false, // isLocalQuorumConsistency
"testClientId",
new RemoteCertificateValidationCallback((sender, certificate, chain, sslPolicyErrors) => true),
new Mock<CosmosClientTelemetryOptions>().Object,
new Mock<IChaosInterceptorFactory>().Object,
true // enableAsyncCacheExceptionNoSharing
);

AccountProperties accountProperties = new AccountProperties
{
// Set the property to true for test
EnableNRegionSynchronousCommit = nRegionCommitEnabled,
};

AccountConsistency ac = new AccountConsistency();
ac.DefaultConsistencyLevel = (Cosmos.ConsistencyLevel) ConsistencyLevel.Session;
accountProperties.Consistency = ac;

Func<Task<AccountProperties>> getDatabaseAccountFn = () =>
// When called with any Uri, return the expected AccountProperties
Task.FromResult(accountProperties);

CosmosAccountServiceConfiguration accountServiceConfiguration = new CosmosAccountServiceConfiguration(
getDatabaseAccountFn);

typeof(CosmosAccountServiceConfiguration)
.GetProperty("AccountProperties", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.SetValue(accountServiceConfiguration, accountProperties);

//Inject the accountServiceConfiguration into the DocumentClient via reflection.
typeof(DocumentClient)
.GetProperty("accountServiceConfiguration", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.SetValue(documentClient, accountServiceConfiguration);


typeof(DocumentClient)
.GetField("storeClientFactory", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.SetValue(documentClient, mockStoreClientFactory.Object);

// Act: Call the private method via reflection
typeof(DocumentClient)
.GetMethod("CreateStoreModel", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.Invoke(documentClient, new object[] { true });

// Assert: Verify the correct value was passed
mockStoreClientFactory.Verify(f =>
f.CreateStoreClient(
It.IsAny<IAddressResolver>(),
It.IsAny<ISessionContainer>(),
It.IsAny<IServiceConfigurationReader>(),
It.IsAny<IAuthorizationTokenProvider>(),
It.IsAny<bool>(),
It.IsAny<bool>(),
It.IsAny<bool>(),
It.IsAny<bool>(),
It.IsAny<bool>(),
It.IsAny<bool>(),
It.Is<AccountConfigurationProperties>(config => config.EnableNRegionSynchronousCommit == accountProperties.EnableNRegionSynchronousCommit),
It.IsAny<ISessionRetryOptions>()),
Times.Once,
"EnableNRegionSynchronousCommit was not passed correctly to AccountConfigurationProperties and StoreClient.");
}

private DocumentClientException CreateTooManyRequestException(int retryAfterInMilliseconds)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,8 @@
Exception
)
]]></Text>
<Json><![CDATA[{
<Json>
<![CDATA[{
"Summary": {
"DirectCalls": {
"(0, 0)": 1
Expand Down Expand Up @@ -330,6 +331,7 @@
"LSN": 1337,
"PartitionKeyRangeId": "42",
"GlobalCommittedLSN": 1234,
"GlobalNRegionCommittedGLSN": -1,
"ItemLSN": 15,
"UsingLocalLSN": true,
"QuorumAckedLSN": 23,
Expand Down Expand Up @@ -527,6 +529,7 @@
"LSN": 0,
"PartitionKeyRangeId": null,
"GlobalCommittedLSN": 0,
"GlobalNRegionCommittedGLSN": 0,
"ItemLSN": 0,
"UsingLocalLSN": false,
"QuorumAckedLSN": 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public void ValidatePropertySerialization()
string id = "testId";
this.TestProperty<AccountProperties>(
id,
$@"{{""id"":""{id}"",""writableLocations"":[],""readableLocations"":[],""userConsistencyPolicy"":null,""addresses"":null,""userReplicationPolicy"":null,""systemReplicationPolicy"":null,""readPolicy"":null,""queryEngineConfiguration"":null,""enableMultipleWriteLocations"":false,""enablePerPartitionFailoverBehavior"":null}}");
$@"{{""id"":""{id}"",""writableLocations"":[],""readableLocations"":[],""userConsistencyPolicy"":null,""addresses"":null,""userReplicationPolicy"":null,""systemReplicationPolicy"":null,""readPolicy"":null,""queryEngineConfiguration"":null,""enableMultipleWriteLocations"":false,""enablePerPartitionFailoverBehavior"":null,""enableNRegionSynchronousCommit"":false}}");

this.TestProperty<DatabaseProperties>(
id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ public void ValidateCustomSerializerNotUsedForInternalTypes()
this.TestProperty<AccountProperties>(
serializerCore,
id,
$@"{{""id"":""{id}"",""writableLocations"":[],""readableLocations"":[],""userConsistencyPolicy"":null,""addresses"":null,""userReplicationPolicy"":null,""systemReplicationPolicy"":null,""readPolicy"":null,""queryEngineConfiguration"":null,""enableMultipleWriteLocations"":false,""enablePerPartitionFailoverBehavior"":null}}");
$@"{{""id"":""{id}"",""writableLocations"":[],""readableLocations"":[],""userConsistencyPolicy"":null,""addresses"":null,""userReplicationPolicy"":null,""systemReplicationPolicy"":null,""readPolicy"":null,""queryEngineConfiguration"":null,""enableMultipleWriteLocations"":false,""enablePerPartitionFailoverBehavior"":null,""enableNRegionSynchronousCommit"":false}}");

this.TestProperty<DatabaseProperties>(
serializerCore,
Expand Down
Loading
Loading