88import com .azure .cosmos .CosmosContainerProactiveInitConfigBuilder ;
99import com .azure .cosmos .CosmosExcludedRegions ;
1010import com .azure .cosmos .DirectConnectionConfig ;
11+ import com .azure .cosmos .CosmosRegionSwitchHint ;
12+ import com .azure .cosmos .SessionRetryOptions ;
13+ import com .azure .cosmos .SessionRetryOptionsBuilder ;
1114import com .azure .cosmos .implementation .directconnectivity .RntbdTransportClient ;
1215import com .azure .cosmos .implementation .guava25 .collect .ImmutableList ;
1316import com .azure .cosmos .implementation .http .HttpClientConfig ;
@@ -40,6 +43,9 @@ public class ClientConfigDiagnosticsTest {
4043 private static final ImplementationBridgeHelpers .CosmosContainerIdentityHelper .CosmosContainerIdentityAccessor containerIdentityAccessor = ImplementationBridgeHelpers
4144 .CosmosContainerIdentityHelper
4245 .getCosmosContainerIdentityAccessor ();
46+ private static final ImplementationBridgeHelpers .CosmosSessionRetryOptionsHelper .CosmosSessionRetryOptionsAccessor sessionRetryOptionsAccessor = ImplementationBridgeHelpers
47+ .CosmosSessionRetryOptionsHelper
48+ .getCosmosSessionRetryOptionsAccessor ();
4349
4450 @ DataProvider (name = "proactiveContainerInitConfigProvider" )
4551 public Object [][] proactiveContainerInitConfigProvider () {
@@ -88,6 +94,48 @@ public Object[][] proactiveContainerInitConfigProvider() {
8894 };
8995 }
9096
97+ @ DataProvider (name = "sessionRetryOptionsConfigProvider" )
98+ public Object [][] sessionRetryOptionsConfigProvider () {
99+
100+ SessionRetryOptions sessionRetryOptionsWithLocalRegionPreferred = new SessionRetryOptionsBuilder ()
101+ .regionSwitchHint (CosmosRegionSwitchHint .LOCAL_REGION_PREFERRED )
102+ .build ();
103+
104+ SessionRetryOptions sessionRetryOptionsWithRemoteRegionPreferred = new SessionRetryOptionsBuilder ()
105+ .regionSwitchHint (CosmosRegionSwitchHint .REMOTE_REGION_PREFERRED )
106+ .build ();
107+
108+ SessionRetryOptions sessionRetryOptionsWithNoDefaults = new SessionRetryOptionsBuilder ()
109+ .regionSwitchHint (CosmosRegionSwitchHint .REMOTE_REGION_PREFERRED )
110+ .minTimeoutPerRegion (Duration .ofSeconds (2 ))
111+ .maxRetriesPerRegion (7 )
112+ .build ();
113+
114+ return new Object [][] {
115+ {
116+ sessionRetryOptionsWithLocalRegionPreferred ,
117+ reconstructSessionRetryOptionsAsString (
118+ sessionRetryOptionsAccessor .getRegionSwitchHint (sessionRetryOptionsWithLocalRegionPreferred ),
119+ sessionRetryOptionsAccessor .getMinInRegionRetryTime (sessionRetryOptionsWithLocalRegionPreferred ),
120+ sessionRetryOptionsAccessor .getMaxInRegionRetryCount (sessionRetryOptionsWithLocalRegionPreferred ))
121+ },
122+ {
123+ sessionRetryOptionsWithRemoteRegionPreferred ,
124+ reconstructSessionRetryOptionsAsString (
125+ sessionRetryOptionsAccessor .getRegionSwitchHint (sessionRetryOptionsWithRemoteRegionPreferred ),
126+ sessionRetryOptionsAccessor .getMinInRegionRetryTime (sessionRetryOptionsWithRemoteRegionPreferred ),
127+ sessionRetryOptionsAccessor .getMaxInRegionRetryCount (sessionRetryOptionsWithRemoteRegionPreferred ))
128+ },
129+ {
130+ sessionRetryOptionsWithNoDefaults ,
131+ reconstructSessionRetryOptionsAsString (
132+ sessionRetryOptionsAccessor .getRegionSwitchHint (sessionRetryOptionsWithNoDefaults ),
133+ sessionRetryOptionsAccessor .getMinInRegionRetryTime (sessionRetryOptionsWithNoDefaults ),
134+ sessionRetryOptionsAccessor .getMaxInRegionRetryCount (sessionRetryOptionsWithNoDefaults ))
135+ }
136+ };
137+ }
138+
91139 @ Test (groups = { "unit" })
92140 public void bareMinimum () throws Exception {
93141 DiagnosticsClientContext clientContext = Mockito .mock (DiagnosticsClientContext .class );
@@ -238,11 +286,43 @@ public void full(
238286
239287 String expectedProactiveInitConfigString = reconstructProactiveInitConfigString (cosmosContainerIdentities , aggressiveWarmupDuration , proactiveConnectionRegionCount );
240288
241- assertThat (objectNode .get ("proactiveInit " ).asText ()).isEqualTo (expectedProactiveInitConfigString );
289+ assertThat (objectNode .get ("proactiveInitCfg " ).asText ()).isEqualTo (expectedProactiveInitConfigString );
242290
243291 System .clearProperty ("COSMOS.REPLICA_ADDRESS_VALIDATION_ENABLED" );
244292 }
245293
294+ @ Test (groups = {"unit" }, dataProvider = "sessionRetryOptionsConfigProvider" )
295+ public void sessionRetryOptionsInDiagnostics (SessionRetryOptions sessionRetryOptions , String expectedSessionRetryOptionsAsString ) throws Exception {
296+ DiagnosticsClientContext clientContext = Mockito .mock (DiagnosticsClientContext .class );
297+
298+ DiagnosticsClientContext .DiagnosticsClientConfig diagnosticsClientConfig = new DiagnosticsClientContext .DiagnosticsClientConfig ();
299+ String machineId = "vmId:" + UUID .randomUUID ();
300+ diagnosticsClientConfig .withMachineId (machineId );
301+ diagnosticsClientConfig .withClientId (1 );
302+ diagnosticsClientConfig .withConnectionMode (ConnectionMode .DIRECT );
303+ diagnosticsClientConfig .withActiveClientCounter (new AtomicInteger (2 ));
304+ diagnosticsClientConfig .withClientMap (new HashMap <>());
305+ diagnosticsClientConfig .withSessionRetryOptions (sessionRetryOptions );
306+
307+ Mockito .doReturn (diagnosticsClientConfig ).when (clientContext ).getConfig ();
308+
309+ StringWriter jsonWriter = new StringWriter ();
310+ JsonGenerator jsonGenerator = new JsonFactory ().createGenerator (jsonWriter );
311+ SerializerProvider serializerProvider = objectMapper .getSerializerProvider ();
312+ DiagnosticsClientContext .DiagnosticsClientConfigSerializer .INSTANCE .serialize (clientContext .getConfig (), jsonGenerator , serializerProvider );
313+ jsonGenerator .flush ();
314+ ObjectNode objectNode = (ObjectNode ) objectMapper .readTree (jsonWriter .toString ());
315+
316+ assertThat (objectNode .get ("id" ).asInt ()).isEqualTo (1 );
317+ assertThat (objectNode .get ("machineId" ).asText ()).isEqualTo (machineId );
318+ assertThat (objectNode .get ("numberOfClients" ).asInt ()).isEqualTo (2 );
319+ assertThat (objectNode .get ("consistencyCfg" ).asText ()).isEqualTo ("(consistency: null, mm: false, prgns: [null])" );
320+ assertThat (objectNode .get ("connCfg" ).get ("rntbd" ).asText ()).isEqualTo ("null" );
321+ assertThat (objectNode .get ("connCfg" ).get ("gw" ).asText ()).isEqualTo ("null" );
322+ assertThat (objectNode .get ("connCfg" ).get ("other" ).asText ()).isEqualTo ("(ed: false, cs: false, rv: true)" );
323+ assertThat (objectNode .get ("sessionRetryCfg" ).asText ()).isEqualTo (expectedSessionRetryOptionsAsString );
324+ }
325+
246326 private static String reconstructProactiveInitConfigString (
247327 List <CosmosContainerIdentity > containerIdentities ,
248328 Duration aggressiveWarmupDuration ,
@@ -259,4 +339,13 @@ private static String reconstructProactiveInitConfigString(
259339 proactiveConnectionRegionCount ,
260340 aggressiveWarmupDuration );
261341 }
342+
343+ private static String reconstructSessionRetryOptionsAsString (CosmosRegionSwitchHint regionSwitchHint , Duration minInRegionRetryTime , int maxInRegionRetryCount ) {
344+ return String .format (
345+ "(rsh:%s, minrrt:%s, maxrrc:%s)" ,
346+ regionSwitchHint == CosmosRegionSwitchHint .REMOTE_REGION_PREFERRED ? "REMOTE_REGION_PREFERRED" : "LOCAL_REGION_PREFERRED" ,
347+ minInRegionRetryTime .toString (),
348+ maxInRegionRetryCount
349+ );
350+ }
262351}
0 commit comments