diff --git a/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/ImplementationBridgeHelpersTest.java b/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/ImplementationBridgeHelpersTest.java
index a8b6a301f761..dd9260e7d447 100644
--- a/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/ImplementationBridgeHelpersTest.java
+++ b/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/ImplementationBridgeHelpersTest.java
@@ -11,7 +11,16 @@
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
@@ -101,4 +110,466 @@ public void accessorInitialization() {
fail("Failed with IllegalAccessException : ", e.getMessage());
}
}
+
+ /**
+ * Regression test for #48622
+ * and #48585.
+ *
+ * Forks a fresh JVM that concurrently triggers {@code } of 12 different Cosmos classes
+ * from 12 threads synchronized via a {@link CyclicBarrier}. In a fresh JVM, {@code }
+ * runs for the first time — the only way to exercise the real deadlock scenario. A 30-second
+ * timeout detects the hang. Runs 5 invocations via TestNG ({@code invocationCount = 5}),
+ * each forking 1 child JVM — totaling 5 fresh JVMs × 12 concurrent threads = 60
+ * {@code } race attempts.
+ */
+ @Test(groups = { "unit" }, invocationCount = 5)
+ public void concurrentAccessorInitializationShouldNotDeadlock() throws Exception {
+
+ String javaHome = System.getProperty("java.home");
+ String javaBin = javaHome + java.io.File.separator + "bin" + java.io.File.separator + "java";
+ String classpath = System.getProperty("java.class.path");
+
+ List command = new ArrayList<>();
+ command.add(javaBin);
+
+ // --add-opens is only supported on JDK 9+
+ try {
+ int majorVersion = Integer.parseInt(System.getProperty("java.specification.version").split("\\.")[0]);
+ if (majorVersion >= 9) {
+ command.add("--add-opens");
+ command.add("java.base/java.lang=ALL-UNNAMED");
+ }
+ } catch (NumberFormatException e) {
+ // JDK 8 returns "1.8" — first element is "1", which is < 9, so no --add-opens
+ }
+
+ command.add("-cp");
+ command.add(classpath);
+ command.add(ConcurrentClinitChildProcess.class.getName());
+
+ int timeoutSeconds = 30;
+ int runs = 1;
+
+ for (int run = 1; run <= runs; run++) {
+ final int currentRun = run;
+ ProcessBuilder pb = new ProcessBuilder(command);
+ pb.redirectErrorStream(true);
+ Process process = pb.start();
+
+ // Drain stdout on a separate thread to prevent blocking if child JVM deadlocks.
+ // Without this, readLine() would block indefinitely and the timeout below
+ // would never be reached.
+ StringBuilder output = new StringBuilder();
+ Thread gobbler = new Thread(() -> {
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ output.append(line).append(System.lineSeparator());
+ logger.info("[child-jvm-run-{}] {}", currentRun, line);
+ }
+ } catch (Exception e) {
+ // Process was destroyed — expected on timeout
+ }
+ });
+ gobbler.setDaemon(true);
+ gobbler.start();
+
+ boolean completed = process.waitFor(timeoutSeconds, TimeUnit.SECONDS);
+
+ if (!completed) {
+ process.destroyForcibly();
+ gobbler.join(5000);
+ fail("Run " + run + ": Child JVM did not complete within " + timeoutSeconds
+ + " seconds — deadlock detected");
+ }
+
+ gobbler.join(5000);
+ int exitCode = process.exitValue();
+ assertThat(exitCode)
+ .as("Run " + run + ": Child JVM exited with non-zero code. Output:\n" + output)
+ .isEqualTo(0);
+ }
+ }
+
+ /**
+ * Entry point for the forked child JVM. Concurrently triggers {@code } of 12 different
+ * Cosmos classes that are involved in the circular initialization chain reported in the issues.
+ * Exits 0 on success, 1 on deadlock (timeout).
+ */
+ public static final class ConcurrentClinitChildProcess {
+ public static void main(String[] args) {
+ int timeoutSeconds = 20;
+
+ String[] classesToLoad = {
+ "com.azure.cosmos.CosmosAsyncClient",
+ "com.azure.cosmos.models.SqlParameter",
+ "com.azure.cosmos.models.FeedResponse",
+ "com.azure.cosmos.models.CosmosItemRequestOptions",
+ "com.azure.cosmos.CosmosAsyncContainer",
+ "com.azure.cosmos.util.CosmosPagedFluxDefaultImpl",
+ "com.azure.cosmos.CosmosClientBuilder",
+ "com.azure.cosmos.CosmosItemSerializer",
+ "com.azure.cosmos.CosmosDiagnostics",
+ "com.azure.cosmos.CosmosDiagnosticsContext",
+ "com.azure.cosmos.models.CosmosQueryRequestOptions",
+ "com.azure.cosmos.models.CosmosChangeFeedRequestOptions"
+ };
+
+ int threadCount = classesToLoad.length;
+
+ // CyclicBarrier ensures all threads release at the exact same instant,
+ // maximizing the probability of concurrent collisions. Without it,
+ // thread startup stagger means earlier threads may finish before
+ // later threads start — hiding the deadlock.
+ CyclicBarrier barrier = new CyclicBarrier(threadCount);
+ ExecutorService executor = Executors.newFixedThreadPool(threadCount);
+
+ try {
+ List> futures = new ArrayList<>();
+ for (int i = 0; i < classesToLoad.length; i++) {
+ final String className = classesToLoad[i];
+ final int idx = i;
+ futures.add(executor.submit(() -> {
+ try {
+ barrier.await();
+ System.out.println("[Thread-" + idx + "] Loading " + className);
+ Class.forName(className);
+ System.out.println("[Thread-" + idx + "] Done.");
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to load " + className, e);
+ }
+ }));
+ }
+
+ boolean deadlock = false;
+ for (int i = 0; i < futures.size(); i++) {
+ try {
+ futures.get(i).get(timeoutSeconds, TimeUnit.SECONDS);
+ } catch (java.util.concurrent.TimeoutException e) {
+ System.err.println("DEADLOCK: Thread-" + i + " timed out after " + timeoutSeconds + "s");
+ deadlock = true;
+ } catch (Exception e) {
+ Throwable root = e;
+ while (root.getCause() != null) {
+ root = root.getCause();
+ }
+ System.err.println("Thread-" + i + " error: " + root);
+ }
+ }
+
+ if (deadlock) {
+ System.exit(1);
+ }
+
+ // Verify all classes are actually initialized
+ for (String className : classesToLoad) {
+ try {
+ // Class.forName with initialize=false just checks if already loaded
+ // If the class was loaded above, this returns immediately
+ Class> cls = Class.forName(className, false,
+ ConcurrentClinitChildProcess.class.getClassLoader());
+ // Verify the class is initialized by accessing its static state
+ // (calling a static method would trigger if not done,
+ // but we explicitly check it's already done)
+ System.out.println("Verified loaded: " + cls.getName());
+ } catch (ClassNotFoundException e) {
+ System.err.println("Class not loaded: " + className);
+ System.exit(1);
+ }
+ }
+
+ System.exit(0);
+ } finally {
+ executor.shutdownNow();
+ }
+ }
+ }
+
+ /**
+ * Enforces that every {@code *Helper} inner class in
+ * {@link ImplementationBridgeHelpers} registers its accessor during {@code }
+ * (i.e., has a {@code static { initialize(); }} block).
+ *
+ * Verification is behavioral, not source-based: a forked child JVM iterates every
+ * {@code *Helper} inner class, calls each {@code getXxxAccessor()} getter (which
+ * lazily resolves the accessor), and checks the accessor is non-null via reflection.
+ * If a class is missing {@code static { initialize(); }}, the accessor remains null
+ * and this test fails.
+ */
+ @Test(groups = { "unit" })
+ public void allAccessorClassesMustHaveStaticInitializerBlock() throws Exception {
+ String javaHome = System.getProperty("java.home");
+ String javaBin = javaHome + java.io.File.separator + "bin" + java.io.File.separator + "java";
+ String classpath = System.getProperty("java.class.path");
+
+ List command = new ArrayList<>();
+ command.add(javaBin);
+
+ try {
+ int majorVersion = Integer.parseInt(System.getProperty("java.specification.version").split("\\.")[0]);
+ if (majorVersion >= 9) {
+ command.add("--add-opens");
+ command.add("java.base/java.lang=ALL-UNNAMED");
+ }
+ } catch (NumberFormatException e) {
+ // JDK 8
+ }
+
+ command.add("-cp");
+ command.add(classpath);
+ command.add(AccessorRegistrationChildProcess.class.getName());
+
+ ProcessBuilder pb = new ProcessBuilder(command);
+ pb.redirectErrorStream(true);
+ Process process = pb.start();
+
+ StringBuilder output = new StringBuilder();
+ Thread gobbler = new Thread(() -> {
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ output.append(line).append(System.lineSeparator());
+ logger.info("[accessor-check] {}", line);
+ }
+ } catch (Exception e) {
+ // Process destroyed
+ }
+ });
+ gobbler.setDaemon(true);
+ gobbler.start();
+
+ boolean completed = process.waitFor(60, TimeUnit.SECONDS);
+ if (!completed) {
+ process.destroyForcibly();
+ gobbler.join(5000);
+ fail("Accessor registration check timed out after 60s. Output:\n" + output);
+ }
+
+ gobbler.join(5000);
+ int exitCode = process.exitValue();
+ assertThat(exitCode)
+ .as("Some accessor classes don't register their accessor during . Output:\n" + output)
+ .isEqualTo(0);
+ }
+
+ /**
+ * Child process that verifies every {@code *Helper} inner class in
+ * {@link ImplementationBridgeHelpers} has its accessor registered after calling the
+ * corresponding {@code getXxxAccessor()} getter. Runs in a fresh JVM where no Cosmos
+ * classes have been loaded yet, so {@code } is triggered for the first time.
+ */
+ public static final class AccessorRegistrationChildProcess {
+ public static void main(String[] args) throws Exception {
+ // Iterate all *Helper inner classes in ImplementationBridgeHelpers.
+ // For each, call the getXxxAccessor() getter which lazily resolves the
+ // accessor (triggering if needed). Then verify the accessor field is non-null.
+
+ Class>[] helpers = ImplementationBridgeHelpers.class.getDeclaredClasses();
+ List failures = new ArrayList<>();
+
+ for (Class> helper : helpers) {
+ if (!helper.getSimpleName().endsWith("Helper")) {
+ continue;
+ }
+
+ // Find the accessor AtomicReference field
+ Field accessorField = null;
+ Field classLoadedField = null;
+ for (Field f : helper.getDeclaredFields()) {
+ if (f.getName().contains("accessor") && f.getType() == AtomicReference.class) {
+ accessorField = f;
+ }
+ if (f.getName().contains("ClassLoaded") && f.getType() == AtomicBoolean.class) {
+ classLoadedField = f;
+ }
+ }
+
+ if (accessorField == null || classLoadedField == null) {
+ continue;
+ }
+
+ // Check if the accessor is already set (from transitive of earlier classes)
+ accessorField.setAccessible(true);
+ AtomicReference> ref = (AtomicReference>) accessorField.get(null);
+ if (ref.get() != null) {
+ System.out.println("OK (already loaded): " + helper.getSimpleName());
+ continue;
+ }
+
+ // Find the target class name by looking for a getXxxAccessor method that lazily
+ // resolves the accessor. We can't easily extract the string constant, so instead
+ // we call the getter and check if the accessor becomes non-null.
+ // The getter lazily triggers of the target class if needed.
+ // If calls initialize(), the accessor is registered.
+ java.lang.reflect.Method getterMethod = null;
+ for (java.lang.reflect.Method m : helper.getDeclaredMethods()) {
+ if (m.getName().startsWith("get") && m.getName().endsWith("Accessor")
+ && m.getParameterCount() == 0
+ && java.lang.reflect.Modifier.isStatic(m.getModifiers())) {
+ getterMethod = m;
+ break;
+ }
+ }
+
+ if (getterMethod == null) {
+ continue;
+ }
+
+ try {
+ Object result = getterMethod.invoke(null);
+ if (result == null) {
+ failures.add(helper.getSimpleName() + ": accessor is null after getter call — "
+ + "target class does not call initialize()");
+ } else {
+ System.out.println("OK: " + helper.getSimpleName());
+ }
+ } catch (Exception e) {
+ Throwable root = e;
+ while (root.getCause() != null) {
+ root = root.getCause();
+ }
+ failures.add(helper.getSimpleName() + ": " + root.getClass().getSimpleName()
+ + " — " + root.getMessage());
+ }
+ }
+
+ if (failures.isEmpty()) {
+ System.out.println("All accessor classes register their accessor during .");
+ System.exit(0);
+ } else {
+ System.err.println("FAILURES — the following classes do not register their accessor "
+ + "during (missing 'static { initialize(); }' block):");
+ for (String f : failures) {
+ System.err.println(" " + f);
+ }
+ System.exit(1);
+ }
+ }
+ }
+
+ /**
+ * Enforces that no consuming class stores an accessor in a {@code static} field or
+ * {@code final} instance field assigned at declaration. Such fields are initialized
+ * during {@code } (for static) or eagerly during construction (for instance
+ * finals assigned inline), and can trigger {@code initializeAllAccessors()}, creating
+ * circular class-initialization lock chains that deadlock under concurrent class
+ * loading (JLS §12.4.2).
+ *
+ * The approved pattern is a {@code private static} getter method:
+ *
{@code
+ * private static XxxAccessor xxxAccessor() {
+ * return ImplementationBridgeHelpers.XxxHelper.getXxxAccessor();
+ * }
+ * }
+ *
+ * Uses reflection — immune to formatting, multiline declarations, and import aliases.
+ */
+ @Test(groups = { "unit" })
+ public void noStaticOrInstanceAccessorFieldsInConsumingClasses() throws Exception {
+ // Step 1: Collect all Accessor interface types from ImplementationBridgeHelpers
+ java.util.Set> accessorTypes = new java.util.HashSet<>();
+ for (Class> inner : ImplementationBridgeHelpers.class.getDeclaredClasses()) {
+ for (Class> nested : inner.getDeclaredClasses()) {
+ if (nested.isInterface() && nested.getSimpleName().endsWith("Accessor")) {
+ accessorTypes.add(nested);
+ }
+ }
+ }
+
+ assertThat(accessorTypes)
+ .as("Should find accessor interfaces in ImplementationBridgeHelpers")
+ .isNotEmpty();
+
+ // Step 2: Classes that legitimately hold accessor AtomicReference fields
+ java.util.Set exemptClassNames = new java.util.HashSet<>(java.util.Arrays.asList(
+ "com.azure.cosmos.implementation.ImplementationBridgeHelpers",
+ "com.azure.cosmos.BridgeInternal",
+ "com.azure.cosmos.models.ModelBridgeInternal",
+ "com.azure.cosmos.util.UtilBridgeInternal"
+ ));
+
+ // Step 3: Force-load all cosmos classes so we can scan them
+ // initializeAllAccessors() transitively loads the main classes
+ ImplementationBridgeHelpers.initializeAllAccessors();
+
+ // Get all classes visible via the classloader that are in com.azure.cosmos
+ // We use the source tree to enumerate class names, then load them
+ java.nio.file.Path cosmosRoot = java.nio.file.Paths.get(
+ System.getProperty("user.dir"))
+ .getParent()
+ .resolve("azure-cosmos")
+ .resolve("src")
+ .resolve("main")
+ .resolve("java");
+
+ assertThat(java.nio.file.Files.exists(cosmosRoot))
+ .as("azure-cosmos source root must exist at: " + cosmosRoot)
+ .isTrue();
+
+ java.nio.file.Path javaRoot = cosmosRoot;
+ List violations = new ArrayList<>();
+
+ java.nio.file.Files.walk(cosmosRoot)
+ .filter(p -> p.toString().endsWith(".java"))
+ .filter(p -> !p.getFileName().toString().equals("module-info.java"))
+ .forEach(p -> {
+ // Convert file path to class name
+ String relative = javaRoot.relativize(p).toString();
+ String className = relative
+ .replace(java.io.File.separatorChar, '.')
+ .replaceAll("\\.java$", "");
+
+ if (exemptClassNames.contains(className)) {
+ return;
+ }
+
+ // Also skip inner classes of exempt classes
+ for (String exempt : exemptClassNames) {
+ if (className.startsWith(exempt + "$")) {
+ return;
+ }
+ }
+
+ try {
+ Class> cls = Class.forName(className, false,
+ ImplementationBridgeHelpers.class.getClassLoader());
+
+ for (Field field : cls.getDeclaredFields()) {
+ Class> fieldType = field.getType();
+
+ // Check if this field's type is one of the Accessor interfaces
+ if (!accessorTypes.contains(fieldType)) {
+ continue;
+ }
+
+ int mods = field.getModifiers();
+ boolean isStatic = java.lang.reflect.Modifier.isStatic(mods);
+ boolean isFinal = java.lang.reflect.Modifier.isFinal(mods);
+
+ // Dangerous: any static accessor field (runs during )
+ // Also flag: final instance fields (assigned at declaration = eager init)
+ if (isStatic) {
+ violations.add(cls.getName() + "." + field.getName()
+ + " — static " + (isFinal ? "final " : "")
+ + fieldType.getSimpleName()
+ + " (runs during , can deadlock)");
+ } else if (isFinal) {
+ violations.add(cls.getName() + "." + field.getName()
+ + " — final " + fieldType.getSimpleName()
+ + " (instance field assigned at declaration, "
+ + "prefer static getter method for consistency)");
+ }
+ }
+ } catch (ClassNotFoundException | NoClassDefFoundError e) {
+ // Skip classes that can't be loaded (e.g., optional dependencies)
+ }
+ });
+
+ assertThat(violations)
+ .as("Found accessor fields that can trigger deadlocks or are inconsistent "
+ + "with the approved static getter pattern.\n"
+ + "Use 'private static XxxAccessor xxx() { return getXxxAccessor(); }' instead.\n"
+ + "Violations:\n" + String.join("\n", violations))
+ .isEmpty();
+ }
}
diff --git a/sdk/cosmos/azure-cosmos/CHANGELOG.md b/sdk/cosmos/azure-cosmos/CHANGELOG.md
index 19ff1ace1e95..52bf69487d48 100644
--- a/sdk/cosmos/azure-cosmos/CHANGELOG.md
+++ b/sdk/cosmos/azure-cosmos/CHANGELOG.md
@@ -7,6 +7,8 @@
#### Breaking Changes
#### Bugs Fixed
+* Fixed JVM `` deadlock when multiple threads concurrently trigger Cosmos SDK class loading for the first time. - See [PR 48689](https://github.com/Azure/azure-sdk-for-java/pull/48689)
+* Fixed `CosmosItemSerializer.DEFAULT_SERIALIZER` returning null when `DefaultCosmosItemSerializer` class is loaded before `CosmosItemSerializer` (circular `` dependency). - See [PR 48689](https://github.com/Azure/azure-sdk-for-java/pull/48689)
#### Other Changes
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncClient.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncClient.java
index ec0dd64af008..ad111dfdebb9 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncClient.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncClient.java
@@ -79,22 +79,25 @@
builder = CosmosClientBuilder.class,
isAsync = true)
public final class CosmosAsyncClient implements Closeable {
+ private static ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.CosmosClientTelemetryConfigAccessor clientTelemetryConfigAccessor() {
+ return ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.getCosmosClientTelemetryConfigAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.ReadConsistencyStrategyHelper.ReadConsistencyStrategyAccessor readConsistencyStrategyAccessor() {
+ return ImplementationBridgeHelpers.ReadConsistencyStrategyHelper.getReadConsistencyStrategyAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.CosmosQueryRequestOptionsAccessor queryOptionsAccessor() {
+ return ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.getCosmosQueryRequestOptionsAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor() {
+ return ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();
+ }
+
private static final Logger logger = LoggerFactory.getLogger(CosmosAsyncClient.class);
private static final CosmosClientTelemetryConfig DEFAULT_TELEMETRY_CONFIG = new CosmosClientTelemetryConfig();
- private static final ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.CosmosQueryRequestOptionsAccessor queryOptionsAccessor =
- ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.getCosmosQueryRequestOptionsAccessor();
- private static final ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor =
- ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();
- private static final ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.CosmosClientTelemetryConfigAccessor
- telemetryConfigAccessor = ImplementationBridgeHelpers
- .CosmosClientTelemetryConfigHelper
- .getCosmosClientTelemetryConfigAccessor();
-
- private static final ImplementationBridgeHelpers.ReadConsistencyStrategyHelper.ReadConsistencyStrategyAccessor
- readConsistencyStrategyAccessor = ImplementationBridgeHelpers
- .ReadConsistencyStrategyHelper
- .getReadConsistencyStrategyAccessor();
private final static Function DEFAULT_CONTAINER_FACTORY =
(originalContainer) -> originalContainer;
@@ -148,7 +151,7 @@ public final class CosmosAsyncClient implements Closeable {
this.clientTelemetryConfig = effectiveTelemetryConfig;
boolean contentResponseOnWriteEnabled = builder.isContentResponseOnWriteEnabled();
ApiType apiType = builder.apiType();
- String clientCorrelationId = telemetryConfigAccessor
+ String clientCorrelationId = clientTelemetryConfigAccessor()
.getClientCorrelationId(effectiveTelemetryConfig);
List permissionList = new ArrayList<>();
@@ -207,15 +210,14 @@ public final class CosmosAsyncClient implements Closeable {
TagName.ClientCorrelationId.toString(),
ClientTelemetryMetrics.escape(effectiveClientCorrelationId));
- this.clientMetricRegistrySnapshot = telemetryConfigAccessor
+ this.clientMetricRegistrySnapshot = clientTelemetryConfigAccessor()
.getClientMetricRegistry(effectiveTelemetryConfig);
- CosmosMeterOptions cpuMeterOptions = telemetryConfigAccessor
+ CosmosMeterOptions cpuMeterOptions = clientTelemetryConfigAccessor()
.getMeterOptions(effectiveTelemetryConfig, CosmosMetricName.SYSTEM_CPU);
- CosmosMeterOptions memoryMeterOptions = telemetryConfigAccessor
+ CosmosMeterOptions memoryMeterOptions = clientTelemetryConfigAccessor()
.getMeterOptions(effectiveTelemetryConfig, CosmosMetricName.SYSTEM_MEMORY_FREE);
-
if (clientMetricRegistrySnapshot != null) {
ClientTelemetryMetrics.add(clientMetricRegistrySnapshot, cpuMeterOptions, memoryMeterOptions);
}
@@ -224,15 +226,15 @@ public final class CosmosAsyncClient implements Closeable {
);
if (this.clientMetricRegistrySnapshot != null) {
- telemetryConfigAccessor.setClientCorrelationTag(
+ clientTelemetryConfigAccessor().setClientCorrelationTag(
effectiveTelemetryConfig,
this.clientCorrelationTag );
- telemetryConfigAccessor.setAccountName(
+ clientTelemetryConfigAccessor().setAccountName(
effectiveTelemetryConfig,
this.accountTagValue
);
- telemetryConfigAccessor.addDiagnosticsHandler(
+ clientTelemetryConfigAccessor().addDiagnosticsHandler(
effectiveTelemetryConfig,
new ClientMetricsDiagnosticsHandler(this)
);
@@ -475,7 +477,7 @@ CosmosPagedFlux readAllDatabases(CosmosQueryRequestOpt
null,
ResourceType.Database,
OperationType.ReadFeed,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -484,7 +486,7 @@ CosmosPagedFlux readAllDatabases(CosmosQueryRequestOpt
return getDocClientWrapper().readDatabases(state)
.map(response ->
- feedResponseAccessor.createFeedResponse(
+ feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosDatabasePropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -504,7 +506,6 @@ public CosmosPagedFlux readAllDatabases() {
return readAllDatabases(new CosmosQueryRequestOptions());
}
-
/**
* Query for databases.
*
@@ -662,7 +663,7 @@ private CosmosPagedFlux queryDatabasesInternal(
null,
ResourceType.Database,
OperationType.Query,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -670,14 +671,13 @@ private CosmosPagedFlux queryDatabasesInternal(
pagedFluxOptions.setFeedOperationState(state);
return getDocClientWrapper().queryDatabases(querySpec, state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosDatabasePropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
});
}
-
private Mono createDatabaseIfNotExistsInternal(CosmosAsyncDatabase database,
ThroughputProperties throughputProperties, Context context) {
String spanName = "createDatabaseIfNotExists." + database.getId();
@@ -765,7 +765,7 @@ ReadConsistencyStrategy getEffectiveReadConsistencyStrategy(
OperationType operationType,
ReadConsistencyStrategy desiredReadConsistencyStrategyOfOperation) {
- return readConsistencyStrategyAccessor.getEffectiveReadConsistencyStrategy(
+ return readConsistencyStrategyAccessor().getEffectiveReadConsistencyStrategy(
resourceType,
operationType,
desiredReadConsistencyStrategyOfOperation,
@@ -780,13 +780,12 @@ CosmosDiagnosticsThresholds getEffectiveDiagnosticsThresholds(
return operationLevelThresholds;
}
-
if (this.clientTelemetryConfig == null) {
return new CosmosDiagnosticsThresholds();
}
CosmosDiagnosticsThresholds clientLevelThresholds =
- telemetryConfigAccessor.getDiagnosticsThresholds(this.clientTelemetryConfig);
+ clientTelemetryConfigAccessor().getDiagnosticsThresholds(this.clientTelemetryConfig);
return clientLevelThresholds != null ? clientLevelThresholds : new CosmosDiagnosticsThresholds();
}
@@ -805,7 +804,7 @@ boolean isTransportLevelTracingEnabled() {
this.clientTelemetryConfig
: DEFAULT_TELEMETRY_CONFIG;
- if (telemetryConfigAccessor.isLegacyTracingEnabled(effectiveConfig)) {
+ if (clientTelemetryConfigAccessor().isLegacyTracingEnabled(effectiveConfig)) {
return false;
}
@@ -813,7 +812,7 @@ boolean isTransportLevelTracingEnabled() {
return false;
}
- return telemetryConfigAccessor.isTransportLevelTracingEnabled(effectiveConfig);
+ return clientTelemetryConfigAccessor().isTransportLevelTracingEnabled(effectiveConfig);
}
void recordOpenConnectionsAndInitCachesCompleted(List cosmosContainerIdentities) {
@@ -859,13 +858,13 @@ public String getAccountTagValue(CosmosAsyncClient client) {
@Override
public EnumSet getMetricTagNames(CosmosAsyncClient client) {
- return telemetryConfigAccessor
+ return clientTelemetryConfigAccessor()
.getMetricTagNames(client.clientTelemetryConfig);
}
@Override
public EnumSet getMetricCategories(CosmosAsyncClient client) {
- return telemetryConfigAccessor
+ return clientTelemetryConfigAccessor()
.getMetricCategories(client.clientTelemetryConfig);
}
@@ -896,7 +895,7 @@ public String getUserAgent(CosmosAsyncClient client) {
@Override
public CosmosMeterOptions getMeterOptions(CosmosAsyncClient client, CosmosMetricName name) {
- return telemetryConfigAccessor
+ return clientTelemetryConfigAccessor()
.getMeterOptions(client.clientTelemetryConfig, name);
}
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncContainer.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncContainer.java
index b3888f1bad3a..ad871bb97c01 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncContainer.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncContainer.java
@@ -98,29 +98,55 @@
* Provides methods for interacting with child resources (Items, Scripts, Conflicts)
*/
public class CosmosAsyncContainer {
+ private static ImplementationBridgeHelpers.PartitionKeyHelper.PartitionKeyAccessor partitionKeyAccessor() {
+ return ImplementationBridgeHelpers.PartitionKeyHelper.getPartitionKeyAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosAsyncClientHelper.CosmosAsyncClientAccessor clientAccessor() {
+ return ImplementationBridgeHelpers.CosmosAsyncClientHelper.getCosmosAsyncClientAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.CosmosQueryRequestOptionsAccessor queryOptionsAccessor() {
+ return ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.getCosmosQueryRequestOptionsAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosItemRequestOptionsHelper.CosmosItemRequestOptionsAccessor itemOptionsAccessor() {
+ return ImplementationBridgeHelpers.CosmosItemRequestOptionsHelper.getCosmosItemRequestOptionsAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor() {
+ return ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosItemResponseHelper.CosmosItemResponseBuilderAccessor itemResponseAccessor() {
+ return ImplementationBridgeHelpers.CosmosItemResponseHelper.getCosmosItemResponseBuilderAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosReadManyRequestOptionsHelper.CosmosReadManyRequestOptionsAccessor readManyOptionsAccessor() {
+ return ImplementationBridgeHelpers.CosmosReadManyRequestOptionsHelper.getCosmosReadManyRequestOptionsAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosDiagnosticsContextHelper.CosmosDiagnosticsContextAccessor ctxAccessor() {
+ return ImplementationBridgeHelpers.CosmosDiagnosticsContextHelper.getCosmosDiagnosticsContextAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosOperationDetailsHelper.CosmosOperationDetailsAccessor operationDetailsAccessor() {
+ return ImplementationBridgeHelpers.CosmosOperationDetailsHelper.getCosmosOperationDetailsAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosBulkExecutionOptionsHelper.CosmosBulkExecutionOptionsAccessor bulkExecutionOptionsAccessor() {
+ return ImplementationBridgeHelpers.CosmosBulkExecutionOptionsHelper.getCosmosBulkExecutionOptionsAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.CosmosClientTelemetryConfigAccessor clientTelemetryConfigAccessor() {
+ return ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.getCosmosClientTelemetryConfigAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosBatchRequestOptionsHelper.CosmosBatchRequestOptionsAccessor batchRequestOptionsAccessor() {
+ return ImplementationBridgeHelpers.CosmosBatchRequestOptionsHelper.getCosmosBatchRequestOptionsAccessor();
+ }
+
private final static Logger logger = LoggerFactory.getLogger(CosmosAsyncContainer.class);
- private static final ImplementationBridgeHelpers.CosmosAsyncClientHelper.CosmosAsyncClientAccessor clientAccessor =
- ImplementationBridgeHelpers.CosmosAsyncClientHelper.getCosmosAsyncClientAccessor();
- private static final ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.CosmosQueryRequestOptionsAccessor queryOptionsAccessor =
- ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.getCosmosQueryRequestOptionsAccessor();
- private static final ImplementationBridgeHelpers.CosmosItemRequestOptionsHelper.CosmosItemRequestOptionsAccessor itemOptionsAccessor =
- ImplementationBridgeHelpers.CosmosItemRequestOptionsHelper.getCosmosItemRequestOptionsAccessor();
- private static final ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor =
- ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();
- private static final ImplementationBridgeHelpers.CosmosItemResponseHelper.CosmosItemResponseBuilderAccessor itemResponseAccessor =
- ImplementationBridgeHelpers.CosmosItemResponseHelper.getCosmosItemResponseBuilderAccessor();
- private static final ImplementationBridgeHelpers.CosmosReadManyRequestOptionsHelper.CosmosReadManyRequestOptionsAccessor readManyOptionsAccessor =
- ImplementationBridgeHelpers.CosmosReadManyRequestOptionsHelper.getCosmosReadManyRequestOptionsAccessor();
- private static final ImplementationBridgeHelpers.CosmosDiagnosticsContextHelper.CosmosDiagnosticsContextAccessor ctxAccessor =
- ImplementationBridgeHelpers.CosmosDiagnosticsContextHelper.getCosmosDiagnosticsContextAccessor();
- private static final ImplementationBridgeHelpers.CosmosOperationDetailsHelper.CosmosOperationDetailsAccessor operationDetailsAccessor =
- ImplementationBridgeHelpers.CosmosOperationDetailsHelper.getCosmosOperationDetailsAccessor();
- private static final ImplementationBridgeHelpers.CosmosBulkExecutionOptionsHelper.CosmosBulkExecutionOptionsAccessor bulkExecutionOptionsAccessor =
- ImplementationBridgeHelpers.CosmosBulkExecutionOptionsHelper.getCosmosBulkExecutionOptionsAccessor();
- private static final ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.CosmosClientTelemetryConfigAccessor clientTelemetryConfigAccessor =
- ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.getCosmosClientTelemetryConfigAccessor();
- private static final ImplementationBridgeHelpers.CosmosBatchRequestOptionsHelper.CosmosBatchRequestOptionsAccessor batchRequestOptionsAccessor =
- ImplementationBridgeHelpers.CosmosBatchRequestOptionsHelper.getCosmosBatchRequestOptionsAccessor();
private final CosmosAsyncDatabase database;
private final String id;
@@ -414,7 +440,7 @@ private Mono> replaceItemWithTrackingId(Class itemT
.readDocument(getItemLink(itemId), requestOptions)
.map(response -> {
mergeDiagnostics(response, cosmosException);
- return itemResponseAccessor
+ return itemResponseAccessor()
.createCosmosItemResponse(response, itemType, requestOptions.getEffectiveItemSerializer());
})
.single();
@@ -428,8 +454,8 @@ private Mono> replaceItemWithTrackingId(Class itemT
})
.flatMap(readResponse -> {
if (readResponse.getStatusCode() == 200
- && itemResponseAccessor.hasTrackingId(readResponse, trackingId)) {
- return Mono.just(itemResponseAccessor.withRemappedStatusCode(
+ && itemResponseAccessor().hasTrackingId(readResponse, trackingId)) {
+ return Mono.just(itemResponseAccessor().withRemappedStatusCode(
readResponse,
200,
cosmosException.getRequestCharge(),
@@ -487,16 +513,14 @@ private Mono> createItemWithTrackingId(
PartitionKeyDefinition pkDef = collection.getPartitionKey();
PartitionKeyInternal partitionKeyInternal = PartitionKeyHelper
.extractPartitionKeyValueFromDocument(internalObjectNode, pkDef);
- PartitionKey partitionKey = ImplementationBridgeHelpers
- .PartitionKeyHelper
- .getPartitionKeyAccessor()
+ PartitionKey partitionKey = partitionKeyAccessor()
.toPartitionKey(partitionKeyInternal);
readRequestOptions.setPartitionKey(partitionKey);
return clientWrapper.readDocument(getItemLink(itemId), readRequestOptions)
.map(response -> {
mergeDiagnostics(response, cosmosException);
- return itemResponseAccessor
+ return itemResponseAccessor()
.createCosmosItemResponse(
response, itemType, readRequestOptions.getEffectiveItemSerializer());
}).single();
@@ -511,8 +535,8 @@ private Mono> createItemWithTrackingId(
})
.flatMap(readResponse -> {
if (readResponse.getStatusCode() == 200
- && itemResponseAccessor.hasTrackingId(readResponse, trackingId)) {
- return Mono.just(itemResponseAccessor.withRemappedStatusCode(
+ && itemResponseAccessor().hasTrackingId(readResponse, trackingId)) {
+ return Mono.just(itemResponseAccessor().withRemappedStatusCode(
readResponse,
201,
cosmosException.getRequestCharge(),
@@ -530,7 +554,7 @@ private boolean isContentResponseOnWriteEffectivelyEnabled(RequestOptions option
requestOptionsContentResponseEnabled = options.isContentResponseOnWriteEnabled();
}
- return clientAccessor.isEffectiveContentResponseOnWriteEnabled(
+ return clientAccessor().isEffectiveContentResponseOnWriteEnabled(
this.database.getClient(), requestOptionsContentResponseEnabled);
}
@@ -538,7 +562,7 @@ private Mono> createItemInternal(T item, CosmosItemReq
checkNotNull(options, "Argument 'options' must not be null.");
RequestOptions requestOptions =
- itemOptionsAccessor.toRequestOptions(options);
+ itemOptionsAccessor().toRequestOptions(options);
applyPolicies(OperationType.Create, ResourceType.Document, requestOptions, this.createItemSpanName);
WriteRetryPolicy nonIdempotentWriteRetryPolicy = requestOptions
.calculateAndGetEffectiveNonIdempotentRetriesEnabled(
@@ -577,30 +601,30 @@ private void applyPolicies(OperationType operationType, ResourceType resourceTyp
String spanName) {
CosmosAsyncClient client = this.database.getClient();
CosmosDiagnosticsThresholds thresholds = requestOptions != null
- ? clientAccessor.getEffectiveDiagnosticsThresholds(client, requestOptions.getDiagnosticsThresholds())
- : clientAccessor.getEffectiveDiagnosticsThresholds(client, null);
- CosmosDiagnosticsContext cosmosCtx = ctxAccessor.create(
+ ? clientAccessor().getEffectiveDiagnosticsThresholds(client, requestOptions.getDiagnosticsThresholds())
+ : clientAccessor().getEffectiveDiagnosticsThresholds(client, null);
+ CosmosDiagnosticsContext cosmosCtx = ctxAccessor().create(
spanName,
- clientAccessor.getAccountTagValue(client),
+ clientAccessor().getAccountTagValue(client),
BridgeInternal.getServiceEndpoint(client),
database.getId(),
getId(),
resourceType,
operationType,
null,
- clientAccessor.getEffectiveConsistencyLevel(client, operationType, requestOptions.getConsistencyLevel()),
- clientAccessor.getEffectiveReadConsistencyStrategy(client, resourceType, operationType, requestOptions.getReadConsistencyStrategy()),
+ clientAccessor().getEffectiveConsistencyLevel(client, operationType, requestOptions.getConsistencyLevel()),
+ clientAccessor().getEffectiveReadConsistencyStrategy(client, resourceType, operationType, requestOptions.getReadConsistencyStrategy()),
null,
thresholds,
null,
- clientAccessor.getConnectionMode(client),
- clientAccessor.getUserAgent(client),
+ clientAccessor().getConnectionMode(client),
+ clientAccessor().getUserAgent(client),
null,
null,
requestOptions);
- CosmosOperationDetails operationDetails = operationDetailsAccessor.create(requestOptions, cosmosCtx);
- clientAccessor.getOperationPolicies(client).forEach(policy -> {
+ CosmosOperationDetails operationDetails = operationDetailsAccessor().create(requestOptions, cosmosCtx);
+ clientAccessor().getOperationPolicies(client).forEach(policy -> {
try {
policy.process(operationDetails);
} catch (RuntimeException exception) {
@@ -625,7 +649,7 @@ private Mono> createItemInternalCore(
item,
requestOptions,
true)
- .map(response -> itemResponseAccessor.createCosmosItemResponse(response, itemType, requestOptions.getEffectiveItemSerializer()))
+ .map(response -> itemResponseAccessor().createCosmosItemResponse(response, itemType, requestOptions.getEffectiveItemSerializer()))
.single();
}
@@ -713,8 +737,8 @@ CosmosPagedFlux readAllItems(CosmosQueryRequestOptions options, Class
return UtilBridgeInternal.createCosmosPagedFlux(pagedFluxOptions -> {
CosmosAsyncClient client = this.getDatabase().getClient();
CosmosQueryRequestOptions requestOptions = options != null ?
- queryOptionsAccessor.clone(options) : new CosmosQueryRequestOptions();
- CosmosQueryRequestOptionsBase> optionsImpl = queryOptionsAccessor.getImpl(requestOptions);
+ queryOptionsAccessor().clone(options) : new CosmosQueryRequestOptions();
+ CosmosQueryRequestOptionsBase> optionsImpl = queryOptionsAccessor().getImpl(requestOptions);
applyPolicies(OperationType.ReadFeed, ResourceType.Document, optionsImpl, this.readAllItemsSpanName);
QueryFeedOperationState state = new QueryFeedOperationState(
client,
@@ -723,7 +747,7 @@ CosmosPagedFlux readAllItems(CosmosQueryRequestOptions options, Class
this.getId(),
ResourceType.Document,
OperationType.ReadFeed,
- queryOptionsAccessor.getQueryNameOrDefault(requestOptions, this.readAllItemsSpanName),
+ queryOptionsAccessor().getQueryNameOrDefault(requestOptions, this.readAllItemsSpanName),
requestOptions,
pagedFluxOptions
);
@@ -838,8 +862,8 @@ public Mono openConnectionsAndInitCaches() {
@Deprecated
public Mono openConnectionsAndInitCaches(int numProactiveConnectionRegions) {
- List preferredRegions = clientAccessor.getPreferredRegions(this.database.getClient());
- boolean endpointDiscoveryEnabled = clientAccessor.isEndpointDiscoveryEnabled(this.database.getClient());
+ List preferredRegions = clientAccessor().getPreferredRegions(this.database.getClient());
+ boolean endpointDiscoveryEnabled = clientAccessor().isEndpointDiscoveryEnabled(this.database.getClient());
checkArgument(numProactiveConnectionRegions > 0, "no. of proactive connection regions should be greater than 0");
@@ -1012,13 +1036,13 @@ Function>> queryItemsInternalFu
SqlQuerySpec sqlQuerySpec, CosmosQueryRequestOptions cosmosQueryRequestOptions, Class classType, boolean isParameterized) {
CosmosAsyncClient client = this.getDatabase().getClient();
CosmosQueryRequestOptions options = cosmosQueryRequestOptions != null ?
- queryOptionsAccessor.clone(cosmosQueryRequestOptions): new CosmosQueryRequestOptions();
- CosmosQueryRequestOptionsBase> optionsImpl = queryOptionsAccessor.getImpl(options);
+ queryOptionsAccessor().clone(cosmosQueryRequestOptions): new CosmosQueryRequestOptions();
+ CosmosQueryRequestOptionsBase> optionsImpl = queryOptionsAccessor().getImpl(options);
applyPolicies(OperationType.Query, ResourceType.Document, optionsImpl, this.queryItemsSpanName);
Function>> pagedFluxOptionsFluxFunction = (pagedFluxOptions -> {
String spanName = this.queryItemsSpanName;
- ShowQueryMode showQueryMode = clientTelemetryConfigAccessor.showQueryMode(client.getClientTelemetryConfig());
+ ShowQueryMode showQueryMode = clientTelemetryConfigAccessor().showQueryMode(client.getClientTelemetryConfig());
if(ShowQueryMode.PARAMETERIZED_ONLY.equals(showQueryMode) && isParameterized) {
@@ -1035,7 +1059,7 @@ Function>> queryItemsInternalFu
this.getId(),
ResourceType.Document,
OperationType.Query,
- queryOptionsAccessor.getQueryNameOrDefault(options, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(options, spanName),
options,
pagedFluxOptions
);
@@ -1057,8 +1081,8 @@ Function>> queryItemsInternalFu
CosmosAsyncClient client = this.getDatabase().getClient();
String spanName = this.queryItemsSpanName;
CosmosQueryRequestOptions options = cosmosQueryRequestOptions != null ?
- queryOptionsAccessor.clone(cosmosQueryRequestOptions): new CosmosQueryRequestOptions();
- CosmosQueryRequestOptionsBase> optionsImpl = queryOptionsAccessor.getImpl(options);
+ queryOptionsAccessor().clone(cosmosQueryRequestOptions): new CosmosQueryRequestOptions();
+ CosmosQueryRequestOptionsBase> optionsImpl = queryOptionsAccessor().getImpl(options);
applyPolicies(OperationType.Query, ResourceType.Document, optionsImpl, spanName);
QueryFeedOperationState state = new QueryFeedOperationState(
client,
@@ -1067,7 +1091,7 @@ Function>> queryItemsInternalFu
this.getId(),
ResourceType.Document,
OperationType.Query,
- queryOptionsAccessor.getQueryNameOrDefault(options, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(options, spanName),
options,
pagedFluxOptions
);
@@ -1268,7 +1292,7 @@ public Mono executeCosmosBatch(
RequestOptions requestOptionsInternal = ModelBridgeInternal.toRequestOptions(requestOptions);
applyPolicies(OperationType.Batch, ResourceType.Document, requestOptionsInternal, this.batchSpanName);
- boolean disableRetryForThrottledBatchRequest = batchRequestOptionsAccessor.shouldDisableRetryForThrottledBatchRequest(requestOptions);
+ boolean disableRetryForThrottledBatchRequest = batchRequestOptionsAccessor().shouldDisableRetryForThrottledBatchRequest(requestOptions);
return withContext(context -> {
final BatchExecutor executor =
new BatchExecutor(
@@ -1355,8 +1379,8 @@ public Flux> executeBulkOperati
bulkOptions = new CosmosBulkExecutionOptions();
}
- CosmosBulkExecutionOptions clonedOptions = bulkExecutionOptionsAccessor.clone(bulkOptions);
- CosmosBulkExecutionOptionsImpl requestOptionsInternal = bulkExecutionOptionsAccessor.getImpl(clonedOptions);
+ CosmosBulkExecutionOptions clonedOptions = bulkExecutionOptionsAccessor().clone(bulkOptions);
+ CosmosBulkExecutionOptionsImpl requestOptionsInternal = bulkExecutionOptionsAccessor().getImpl(clonedOptions);
applyPolicies(OperationType.Batch, ResourceType.Document, requestOptionsInternal, this.bulkSpanName);
return Flux.deferContextual(context -> {
@@ -1539,10 +1563,10 @@ private Mono> readManyInternal(
CosmosQueryRequestOptions queryRequestOptions = requestOptions == null
? new CosmosQueryRequestOptions()
- : queryOptionsAccessor.clone(readManyOptionsAccessor.getImpl(requestOptions));
+ : queryOptionsAccessor().clone(readManyOptionsAccessor().getImpl(requestOptions));
queryRequestOptions.setMaxDegreeOfParallelism(-1);
queryRequestOptions.setQueryName("readMany");
- CosmosQueryRequestOptionsBase> cosmosQueryRequestOptionsImpl = queryOptionsAccessor.getImpl(queryRequestOptions);
+ CosmosQueryRequestOptionsBase> cosmosQueryRequestOptionsImpl = queryOptionsAccessor().getImpl(queryRequestOptions);
applyPolicies(OperationType.Query, ResourceType.Document, cosmosQueryRequestOptionsImpl, this.readManyItemsSpanName);
CosmosAsyncClient client = this.getDatabase().getClient();
@@ -1555,7 +1579,7 @@ private Mono> readManyInternal(
this.getId(),
ResourceType.Document,
OperationType.Query,
- queryOptionsAccessor.getQueryNameOrDefault(queryRequestOptions, this.readManyItemsSpanName),
+ queryOptionsAccessor().getQueryNameOrDefault(queryRequestOptions, this.readManyItemsSpanName),
queryRequestOptions,
fluxOptions
);
@@ -1564,7 +1588,7 @@ private Mono> readManyInternal(
.getAsyncDocumentClient(this.getDatabase())
.readMany(itemIdentityList, BridgeInternal.getLink(this), state, classType);
- RequestOptions options = queryOptionsAccessor.toRequestOptions(queryRequestOptions);
+ RequestOptions options = queryOptionsAccessor().toRequestOptions(queryRequestOptions);
return client
.getDiagnosticsProvider()
@@ -1649,7 +1673,7 @@ public CosmosPagedFlux readAllItems(
requestOptions.setPartitionKey(partitionKey);
- CosmosQueryRequestOptionsBase> cosmosQueryRequestOptionsImpl = queryOptionsAccessor.getImpl(requestOptions);
+ CosmosQueryRequestOptionsBase> cosmosQueryRequestOptionsImpl = queryOptionsAccessor().getImpl(requestOptions);
applyPolicies(OperationType.Query, ResourceType.Document, cosmosQueryRequestOptionsImpl, this.readManyItemsSpanName);
return UtilBridgeInternal.createCosmosPagedFlux(pagedFluxOptions -> {
@@ -1661,7 +1685,7 @@ public CosmosPagedFlux readAllItems(
this.getId(),
ResourceType.Document,
OperationType.ReadFeed,
- queryOptionsAccessor.getQueryNameOrDefault(requestOptions, this.readAllItemsOfLogicalPartitionSpanName),
+ queryOptionsAccessor().getQueryNameOrDefault(requestOptions, this.readAllItemsOfLogicalPartitionSpanName),
requestOptions,
pagedFluxOptions
);
@@ -1912,7 +1936,7 @@ public Mono> deleteAllItemsByPartitionKey(PartitionKe
}
ModelBridgeInternal.setPartitionKey(options, partitionKey);
RequestOptions requestOptions =
- itemOptionsAccessor.toRequestOptions(options);
+ itemOptionsAccessor().toRequestOptions(options);
requestOptions.setEffectiveItemSerializer(this.database.getClient().getEffectiveItemSerializer(requestOptions.getEffectiveItemSerializer()));
return withContext(context -> deleteAllItemsByPartitionKeyInternal(partitionKey, requestOptions, context));
}
@@ -1998,7 +2022,7 @@ public CosmosPagedFlux readAllConflicts(CosmosQueryReq
this.getId(),
ResourceType.Conflict,
OperationType.ReadFeed,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, this.readAllConflictsSpanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, this.readAllConflictsSpanName),
nonNullOptions,
pagedFluxOptions
);
@@ -2006,7 +2030,7 @@ public CosmosPagedFlux readAllConflicts(CosmosQueryReq
pagedFluxOptions.setFeedOperationState(state);
return database.getDocClientWrapper().readConflicts(getLink(), state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosConflictPropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -2054,7 +2078,7 @@ public CosmosPagedFlux queryConflicts(String query, Co
final CosmosQueryRequestOptions requestOptions = options == null ? new CosmosQueryRequestOptions() : options;
return UtilBridgeInternal.createCosmosPagedFlux(pagedFluxOptions -> {
CosmosAsyncClient client = this.getDatabase().getClient();
- String operationId = queryOptionsAccessor.getQueryNameOrDefault(requestOptions, this.queryConflictsSpanName);
+ String operationId = queryOptionsAccessor().getQueryNameOrDefault(requestOptions, this.queryConflictsSpanName);
QueryFeedOperationState state = new QueryFeedOperationState(
client,
@@ -2063,7 +2087,7 @@ public CosmosPagedFlux queryConflicts(String query, Co
this.getId(),
ResourceType.Conflict,
OperationType.Query,
- queryOptionsAccessor.getQueryNameOrDefault(requestOptions, this.queryConflictsSpanName),
+ queryOptionsAccessor().getQueryNameOrDefault(requestOptions, this.queryConflictsSpanName),
requestOptions,
pagedFluxOptions
);
@@ -2071,7 +2095,7 @@ public CosmosPagedFlux queryConflicts(String query, Co
pagedFluxOptions.setFeedOperationState(state);
return database.getDocClientWrapper().queryConflicts(getLink(), query, state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosConflictPropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -2157,7 +2181,7 @@ private Mono> deleteItemInternal(
Context context) {
RequestOptions requestOptions =
- itemOptionsAccessor.toRequestOptions(options);
+ itemOptionsAccessor().toRequestOptions(options);
applyPolicies(OperationType.Delete, ResourceType.Document, requestOptions, this.deleteItemSpanName);
WriteRetryPolicy nonIdempotentWriteRetryPolicy = requestOptions
.calculateAndGetEffectiveNonIdempotentRetriesEnabled(
@@ -2179,7 +2203,7 @@ private Mono> deleteItemInternalCore(
Mono> responseMono = this.getDatabase()
.getDocClientWrapper()
.deleteDocument(getItemLink(itemId), internalObjectNode, requestOptions)
- .map(response -> itemResponseAccessor.createCosmosItemResponse(response, Object.class, CosmosItemSerializer.DEFAULT_SERIALIZER))
+ .map(response -> itemResponseAccessor().createCosmosItemResponse(response, Object.class, CosmosItemSerializer.DEFAULT_SERIALIZER))
.single();
CosmosAsyncClient client = database.getClient();
return client
@@ -2205,7 +2229,7 @@ private Mono> deleteAllItemsByPartitionKeyInternal(
Mono> responseMono = this.getDatabase()
.getDocClientWrapper()
.deleteAllDocumentsByPartitionKey(getLink(), partitionKey, requestOptions)
- .map(response -> itemResponseAccessor.createCosmosItemResponse(response, Object.class, CosmosItemSerializer.DEFAULT_SERIALIZER))
+ .map(response -> itemResponseAccessor().createCosmosItemResponse(response, Object.class, CosmosItemSerializer.DEFAULT_SERIALIZER))
.single();
CosmosAsyncClient client = database.getClient();
return client
@@ -2236,7 +2260,7 @@ private Mono> replaceItemInternalCore(
return this.getDatabase()
.getDocClientWrapper()
.replaceDocument(getItemLink(itemId), item, requestOptions)
- .map(response -> itemResponseAccessor.createCosmosItemResponse(response, itemType, requestOptions.getEffectiveItemSerializer()))
+ .map(response -> itemResponseAccessor().createCosmosItemResponse(response, itemType, requestOptions.getEffectiveItemSerializer()))
.single();
}
@@ -2266,7 +2290,7 @@ private Mono> replaceItemInternal(
checkNotNull(options, "Argument 'options' must not be null.");
RequestOptions requestOptions =
- itemOptionsAccessor.toRequestOptions(options);
+ itemOptionsAccessor().toRequestOptions(options);
applyPolicies(OperationType.Replace, ResourceType.Document, requestOptions, this.replaceItemSpanName);
WriteRetryPolicy nonIdempotentWriteRetryPolicy = requestOptions
.calculateAndGetEffectiveNonIdempotentRetriesEnabled(
@@ -2309,7 +2333,7 @@ private Mono> patchItemInternal(
Context context,
Class itemType) {
- RequestOptions requestOptions = itemOptionsAccessor.toRequestOptions(options);
+ RequestOptions requestOptions = itemOptionsAccessor().toRequestOptions(options);
applyPolicies(OperationType.Patch, ResourceType.Document, requestOptions, this.patchItemSpanName);
WriteRetryPolicy nonIdempotentWriteRetryPolicy = requestOptions
@@ -2325,7 +2349,7 @@ private Mono> patchItemInternal(
Mono> responseMono = this.getDatabase()
.getDocClientWrapper()
.patchDocument(getItemLink(itemId), cosmosPatchOperations, requestOptions)
- .map(response -> itemResponseAccessor.createCosmosItemResponse(response, itemType, requestOptions.getEffectiveItemSerializer()));
+ .map(response -> itemResponseAccessor().createCosmosItemResponse(response, itemType, requestOptions.getEffectiveItemSerializer()));
CosmosAsyncClient client = database
.getClient();
@@ -2349,7 +2373,7 @@ private Mono> upsertItemInternal(T item, CosmosItemReq
@SuppressWarnings("unchecked")
Class itemType = (Class) item.getClass();
RequestOptions requestOptions =
- itemOptionsAccessor.toRequestOptions(options);
+ itemOptionsAccessor().toRequestOptions(options);
applyPolicies(OperationType.Upsert, ResourceType.Document, requestOptions, this.upsertItemSpanName);
WriteRetryPolicy nonIdempotentWriteRetryPolicy = requestOptions
@@ -2364,7 +2388,7 @@ private Mono> upsertItemInternal(T item, CosmosItemReq
.upsertDocument(this.getLink(), item,
effectiveOptions,
true)
- .map(response -> itemResponseAccessor.createCosmosItemResponse(
+ .map(response -> itemResponseAccessor().createCosmosItemResponse(
response, itemType, requestOptions.getEffectiveItemSerializer()))
.single();
CosmosAsyncClient client = database
@@ -2390,12 +2414,12 @@ private Mono> readItemInternal(
CosmosItemRequestOptions options, Class itemType,
Context context) {
RequestOptions requestOptions =
- itemOptionsAccessor.toRequestOptions(options);
+ itemOptionsAccessor().toRequestOptions(options);
requestOptions.setEffectiveItemSerializer(database.getClient().getEffectiveItemSerializer(requestOptions.getEffectiveItemSerializer()));
applyPolicies(OperationType.Read, ResourceType.Document, requestOptions, this.readItemSpanName);
Mono> responseMono = this.getDatabase().getDocClientWrapper()
.readDocument(getItemLink(itemId), requestOptions)
- .map(response -> itemResponseAccessor.createCosmosItemResponse(response, itemType, requestOptions.getEffectiveItemSerializer()))
+ .map(response -> itemResponseAccessor().createCosmosItemResponse(response, itemType, requestOptions.getEffectiveItemSerializer()))
.single();
CosmosAsyncClient client = database
.getClient();
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncDatabase.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncDatabase.java
index ce4de922f157..aeecab59d61b 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncDatabase.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncDatabase.java
@@ -44,11 +44,13 @@
* Perform read and delete databases, update database throughput, and perform operations on child resources
*/
public class CosmosAsyncDatabase {
- private static final ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.CosmosQueryRequestOptionsAccessor queryOptionsAccessor =
- ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.getCosmosQueryRequestOptionsAccessor();
+ private static ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.CosmosQueryRequestOptionsAccessor queryOptionsAccessor() {
+ return ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.getCosmosQueryRequestOptionsAccessor();
+ }
- private static final ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor =
- ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();
+ private static ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor() {
+ return ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();
+ }
private final CosmosAsyncClient client;
private final String id;
@@ -636,9 +638,7 @@ public CosmosPagedFlux readAllContainers(CosmosQueryR
return UtilBridgeInternal.createCosmosPagedFlux(pagedFluxOptions -> {
String spanName = "readAllContainers." + this.getId();
CosmosAsyncClient client = this.getClient();
- String operationId = ImplementationBridgeHelpers
- .CosmosQueryRequestOptionsHelper
- .getCosmosQueryRequestOptionsAccessor()
+ String operationId = queryOptionsAccessor()
.getQueryNameOrDefault(requestOptions, spanName);
QueryFeedOperationState state = new QueryFeedOperationState(
@@ -648,7 +648,7 @@ public CosmosPagedFlux readAllContainers(CosmosQueryR
null,
ResourceType.DocumentCollection,
OperationType.ReadFeed,
- queryOptionsAccessor.getQueryNameOrDefault(requestOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(requestOptions, spanName),
requestOptions,
pagedFluxOptions
);
@@ -656,7 +656,7 @@ public CosmosPagedFlux readAllContainers(CosmosQueryR
pagedFluxOptions.setFeedOperationState(state);
return getDocClientWrapper().readCollections(getLink(), state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosContainerPropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -956,7 +956,7 @@ CosmosPagedFlux readAllUsers(CosmosQueryRequestOptions opt
null,
ResourceType.User,
OperationType.ReadFeed,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -964,7 +964,7 @@ CosmosPagedFlux readAllUsers(CosmosQueryRequestOptions opt
pagedFluxOptions.setFeedOperationState(state);
return getDocClientWrapper().readUsers(getLink(), state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosUserPropertiesFromV2Results(response.getResults()), response
.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -1019,7 +1019,7 @@ public CosmosPagedFlux readAllClientEncrypt
null,
ResourceType.ClientEncryptionKey,
OperationType.ReadFeed,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -1027,7 +1027,7 @@ public CosmosPagedFlux readAllClientEncrypt
pagedFluxOptions.setFeedOperationState(state);
return getDocClientWrapper().readClientEncryptionKeys(getLink(), state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getClientEncryptionKeyPropertiesList(response.getResults()), response
.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -1120,7 +1120,7 @@ private CosmosPagedFlux queryClientEncrypti
null,
ResourceType.ClientEncryptionKey,
OperationType.Query,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -1304,7 +1304,7 @@ private CosmosPagedFlux queryContainersInternal(SqlQu
null,
ResourceType.DocumentCollection,
OperationType.Query,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -1312,7 +1312,7 @@ private CosmosPagedFlux queryContainersInternal(SqlQu
pagedFluxOptions.setFeedOperationState(state);
return getDocClientWrapper().queryCollections(getLink(), querySpec, state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosContainerPropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -1332,7 +1332,7 @@ private CosmosPagedFlux queryUsersInternal(SqlQuerySpec qu
null,
ResourceType.User,
OperationType.Query,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -1590,9 +1590,7 @@ private Mono readThroughputInternal(Context context) {
null,
OperationType.Read,
ResourceType.Offer,
- ImplementationBridgeHelpers
- .CosmosQueryRequestOptionsHelper
- .getCosmosQueryRequestOptionsAccessor()
+ queryOptionsAccessor()
.toRequestOptions(qryOptions));
}
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncScripts.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncScripts.java
index 2273ea50197c..178fcd184e55 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncScripts.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncScripts.java
@@ -32,11 +32,13 @@
* and Triggers
*/
public class CosmosAsyncScripts {
- private static final ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.CosmosQueryRequestOptionsAccessor queryOptionsAccessor =
- ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.getCosmosQueryRequestOptionsAccessor();
+ private static ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.CosmosQueryRequestOptionsAccessor queryOptionsAccessor() {
+ return ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.getCosmosQueryRequestOptionsAccessor();
+ }
- private static final ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor =
- ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();
+ private static ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor() {
+ return ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();
+ }
private final CosmosAsyncContainer container;
private final CosmosAsyncDatabase database;
@@ -129,7 +131,7 @@ CosmosPagedFlux readAllStoredProcedures(CosmosQ
this.container.getId(),
ResourceType.StoredProcedure,
OperationType.ReadFeed,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -138,7 +140,7 @@ CosmosPagedFlux readAllStoredProcedures(CosmosQ
return database.getDocClientWrapper()
.readStoredProcedures(container.getLink(), state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosStoredProcedurePropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -262,7 +264,7 @@ CosmosPagedFlux readAllUserDefinedFunctions
this.container.getId(),
ResourceType.UserDefinedFunction,
OperationType.ReadFeed,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -271,7 +273,7 @@ CosmosPagedFlux readAllUserDefinedFunctions
return database.getDocClientWrapper()
.readUserDefinedFunctions(container.getLink(), state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosUserDefinedFunctionPropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -394,7 +396,7 @@ CosmosPagedFlux readAllTriggers(CosmosQueryRequestOptio
this.container.getId(),
ResourceType.Trigger,
OperationType.ReadFeed,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -403,7 +405,7 @@ CosmosPagedFlux readAllTriggers(CosmosQueryRequestOptio
return database.getDocClientWrapper()
.readTriggers(container.getLink(), state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosTriggerPropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -477,7 +479,7 @@ private CosmosPagedFlux queryStoredProceduresIn
this.container.getId(),
ResourceType.StoredProcedure,
OperationType.Query,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -486,7 +488,7 @@ private CosmosPagedFlux queryStoredProceduresIn
return database.getDocClientWrapper()
.queryStoredProcedures(container.getLink(), querySpec, state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosStoredProcedurePropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -508,7 +510,7 @@ private CosmosPagedFlux queryUserDefinedFun
this.container.getId(),
ResourceType.UserDefinedFunction,
OperationType.Query,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -517,7 +519,7 @@ private CosmosPagedFlux queryUserDefinedFun
return database.getDocClientWrapper()
.queryUserDefinedFunctions(container.getLink(), querySpec, state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosUserDefinedFunctionPropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -546,7 +548,7 @@ private CosmosPagedFlux queryTriggersInternal(
this.container.getId(),
ResourceType.Trigger,
OperationType.Query,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -555,7 +557,7 @@ private CosmosPagedFlux queryTriggersInternal(
return database.getDocClientWrapper()
.queryTriggers(container.getLink(), querySpec, state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosTriggerPropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncUser.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncUser.java
index 45cf0f1ae331..1efe0215dd2f 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncUser.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosAsyncUser.java
@@ -27,11 +27,13 @@
* The type Cosmos async user.
*/
public class CosmosAsyncUser {
- private static final ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.CosmosQueryRequestOptionsAccessor queryOptionsAccessor =
- ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.getCosmosQueryRequestOptionsAccessor();
+ private static ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.CosmosQueryRequestOptionsAccessor queryOptionsAccessor() {
+ return ImplementationBridgeHelpers.CosmosQueryRequestOptionsHelper.getCosmosQueryRequestOptionsAccessor();
+ }
- private static final ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor =
- ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();
+ private static ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor() {
+ return ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();
+ }
private final CosmosAsyncDatabase database;
@@ -129,7 +131,6 @@ public Mono upsertPermission(
return withContext(context -> upsertPermissionInternal(permission, requestOptions, context));
}
-
/**
* Reads all permissions.
*
@@ -168,7 +169,7 @@ CosmosPagedFlux readAllPermissions(CosmosQueryReques
null,
ResourceType.Permission,
OperationType.ReadFeed,
- queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
@@ -177,7 +178,7 @@ CosmosPagedFlux readAllPermissions(CosmosQueryReques
return getDatabase().getDocClientWrapper()
.readPermissions(getLink(), state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosPermissionPropertiesFromResults(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
@@ -224,7 +225,7 @@ public CosmosPagedFlux queryPermissions(String query
null,
ResourceType.Permission,
OperationType.Query,
- queryOptionsAccessor.getQueryNameOrDefault(requestOptions, spanName),
+ queryOptionsAccessor().getQueryNameOrDefault(requestOptions, spanName),
requestOptions,
pagedFluxOptions
);
@@ -233,7 +234,7 @@ public CosmosPagedFlux queryPermissions(String query
return getDatabase().getDocClientWrapper()
.queryPermissions(getLink(), query, state)
- .map(response -> feedResponseAccessor.createFeedResponse(
+ .map(response -> feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosPermissionPropertiesFromResults(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosContainerProactiveInitConfig.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosContainerProactiveInitConfig.java
index 2ac188cabc02..04cb2bbe0604 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosContainerProactiveInitConfig.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosContainerProactiveInitConfig.java
@@ -18,10 +18,10 @@
* Encapsulates the list of container identities and no. of proactive connection regions.
* */
public final class CosmosContainerProactiveInitConfig {
- private final static ImplementationBridgeHelpers.CosmosContainerIdentityHelper.CosmosContainerIdentityAccessor
- containerIdAccessor = ImplementationBridgeHelpers
- .CosmosContainerIdentityHelper
- .getCosmosContainerIdentityAccessor();
+ private static ImplementationBridgeHelpers.CosmosContainerIdentityHelper.CosmosContainerIdentityAccessor containerIdentityAccessor() {
+ return ImplementationBridgeHelpers.CosmosContainerIdentityHelper.getCosmosContainerIdentityAccessor();
+ }
+
private final List cosmosContainerIdentities;
private final Map containerDirectConnectionMetadataMap;
private final int numProactiveConnectionRegions;
@@ -105,7 +105,7 @@ public String toString() {
.stream()
.map(ci -> String.join(
".",
- containerIdAccessor.getContainerLink(ci)))
+ containerIdentityAccessor().getContainerLink(ci)))
.collect(Collectors.joining(";")),
numProactiveConnectionRegions,
aggressiveWarmupDuration);
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosDiagnosticsContext.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosDiagnosticsContext.java
index a5adfae71043..dc626b41f08e 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosDiagnosticsContext.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosDiagnosticsContext.java
@@ -43,8 +43,9 @@
* by diagnostic handlers
*/
public final class CosmosDiagnosticsContext {
- private final static ImplementationBridgeHelpers.CosmosDiagnosticsHelper.CosmosDiagnosticsAccessor diagAccessor =
- ImplementationBridgeHelpers.CosmosDiagnosticsHelper.getCosmosDiagnosticsAccessor();
+ private static ImplementationBridgeHelpers.CosmosDiagnosticsHelper.CosmosDiagnosticsAccessor diagAccessor() {
+ return ImplementationBridgeHelpers.CosmosDiagnosticsHelper.getCosmosDiagnosticsAccessor();
+ }
private final static ObjectMapper mapper = Utils.getSimpleObjectMapper();
@@ -336,17 +337,17 @@ void addDiagnostics(CosmosDiagnostics cosmosDiagnostics) {
}
if (cosmosDiagnostics.getFeedResponseDiagnostics() != null &&
- !diagAccessor.isDiagnosticsCapturedInPagedFlux(cosmosDiagnostics).get()) {
+ !diagAccessor().isDiagnosticsCapturedInPagedFlux(cosmosDiagnostics).get()) {
return;
}
synchronized (this.contextId) {
if (this.samplingRateSnapshot != null) {
- diagAccessor.setSamplingRateSnapshot(cosmosDiagnostics, this.samplingRateSnapshot);
+ diagAccessor().setSamplingRateSnapshot(cosmosDiagnostics, this.samplingRateSnapshot);
}
- this.addRequestSize(diagAccessor.getRequestPayloadSizeInBytes(cosmosDiagnostics));
- this.addResponseSize(diagAccessor.getTotalResponsePayloadSizeInBytes(cosmosDiagnostics));
+ this.addRequestSize(diagAccessor().getRequestPayloadSizeInBytes(cosmosDiagnostics));
+ this.addResponseSize(diagAccessor().getTotalResponsePayloadSizeInBytes(cosmosDiagnostics));
this.diagnostics.add(cosmosDiagnostics);
this.cachedRequestDiagnostics = null;
this.requestInfo = null;
@@ -617,7 +618,7 @@ void setSamplingRateSnapshot(double samplingRate, boolean isSampledOut) {
this.samplingRateSnapshot = samplingRate;
this.isSampledOut = isSampledOut;
for (CosmosDiagnostics d : this.diagnostics) {
- diagAccessor.setSamplingRateSnapshot(d, samplingRate);
+ diagAccessor().setSamplingRateSnapshot(d, samplingRate);
}
}
}
@@ -992,12 +993,8 @@ void setRequestOptions(
// the following helper/accessor only helps to access this class outside of this package.//
///////////////////////////////////////////////////////////////////////////////////////////
static void initialize() {
- ImplementationBridgeHelpers
- .CosmosDiagnosticsContextHelper
- .setCosmosDiagnosticsContextAccessor(
- new ImplementationBridgeHelpers
- .CosmosDiagnosticsContextHelper
- .CosmosDiagnosticsContextAccessor() {
+ ImplementationBridgeHelpers.CosmosDiagnosticsContextHelper.setCosmosDiagnosticsContextAccessor(
+ new ImplementationBridgeHelpers.CosmosDiagnosticsContextHelper.CosmosDiagnosticsContextAccessor() {
@Override
public CosmosDiagnosticsContext create(String spanName, String account, String endpoint,
@@ -1201,4 +1198,6 @@ public Integer getTargetMaxMicroBatchSize(CosmosDiagnosticsContext ctx) {
}
});
}
+
+ static { initialize(); }
}
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosItemSerializer.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosItemSerializer.java
index f66dff9a21c1..a81ed9fa15e2 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosItemSerializer.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosItemSerializer.java
@@ -30,12 +30,21 @@
*/
public abstract class CosmosItemSerializer {
+ static { initialize(); }
/**
* Gets the default Cosmos item serializer. This serializer is used by default when no custom serializer is
* specified on request options or the {@link CosmosClientBuilder}
*/
- public final static CosmosItemSerializer DEFAULT_SERIALIZER = DefaultCosmosItemSerializer.DEFAULT_SERIALIZER;
+ public final static CosmosItemSerializer DEFAULT_SERIALIZER =
+ new DefaultCosmosItemSerializer(Utils.getDocumentObjectMapper(Configs.getItemSerializationInclusionMode()));
+
+ // Moved from DefaultCosmosItemSerializer to eliminate concurrent deadlock
+ // between parent (CosmosItemSerializer) and child (DefaultCosmosItemSerializer).
+ // Guaranteed to use serialization inclusion mode "Always".
+ // Accessed via CosmosItemSerializerAccessor.getInternalDefaultSerializer().
+ private static final CosmosItemSerializer INTERNAL_DEFAULT_SERIALIZER =
+ new DefaultCosmosItemSerializer(Utils.getSimpleObjectMapper());
private boolean shouldWrapSerializationExceptions;
@@ -161,8 +170,11 @@ public void setItemObjectMapper(CosmosItemSerializer serializer, ObjectMapper ma
public ObjectMapper getItemObjectMapper(CosmosItemSerializer serializer) {
return serializer.getItemObjectMapper();
}
+
+ @Override
+ public CosmosItemSerializer getInternalDefaultSerializer() {
+ return INTERNAL_DEFAULT_SERIALIZER;
+ }
});
}
-
- static { initialize(); }
}
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosRequestContext.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosRequestContext.java
index f2a352b93f1b..be6538430345 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosRequestContext.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/CosmosRequestContext.java
@@ -217,4 +217,6 @@ public CosmosRequestContext create(OverridableRequestOptions requestOptions) {
}
);
}
+
+ static { initialize(); }
}
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ChangeFeedOperationState.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ChangeFeedOperationState.java
index 4bd2fa771480..e7be63f03d2d 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ChangeFeedOperationState.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ChangeFeedOperationState.java
@@ -10,11 +10,10 @@
import static com.azure.cosmos.implementation.guava25.base.Preconditions.checkNotNull;
public class ChangeFeedOperationState extends FeedOperationState {
- private static final ImplementationBridgeHelpers
- .CosmosChangeFeedRequestOptionsHelper
- .CosmosChangeFeedRequestOptionsAccessor cfOptAccessor = ImplementationBridgeHelpers
- .CosmosChangeFeedRequestOptionsHelper
- .getCosmosChangeFeedRequestOptionsAccessor();
+
+ private static ImplementationBridgeHelpers.CosmosChangeFeedRequestOptionsHelper.CosmosChangeFeedRequestOptionsAccessor changeFeedOptionsAccessor() {
+ return ImplementationBridgeHelpers.CosmosChangeFeedRequestOptionsHelper.getCosmosChangeFeedRequestOptionsAccessor();
+ }
private final CosmosChangeFeedRequestOptions options;
@@ -37,17 +36,17 @@ public ChangeFeedOperationState(
resourceType,
checkNotNull(operationType, "Argument 'operationType' must not be null."),
operationId,
- clientAccessor.getEffectiveConsistencyLevel(
+ clientAccessor().getEffectiveConsistencyLevel(
cosmosAsyncClient,
operationType,
null),
- clientAccessor.getEffectiveDiagnosticsThresholds(
+ clientAccessor().getEffectiveDiagnosticsThresholds(
cosmosAsyncClient,
- cfOptAccessor.getDiagnosticsThresholds(
+ changeFeedOptionsAccessor().getDiagnosticsThresholds(
checkNotNull(changeFeedRequestOptions, "Argument 'changeFeedRequestOptions' must not be null."))),
fluxOptions,
getEffectiveMaxItemCount(fluxOptions, changeFeedRequestOptions),
- cfOptAccessor.getImpl(checkNotNull(changeFeedRequestOptions, "Argument 'changeFeedRequestOptions' must not be null."))
+ changeFeedOptionsAccessor().getImpl(checkNotNull(changeFeedRequestOptions, "Argument 'changeFeedRequestOptions' must not be null."))
);
this.options = ModelBridgeInternal
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ChangeFeedQueryImpl.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ChangeFeedQueryImpl.java
index eb5d3110f8e1..c8bca12fcbf4 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ChangeFeedQueryImpl.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ChangeFeedQueryImpl.java
@@ -30,12 +30,13 @@
class ChangeFeedQueryImpl {
- private final static
- ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor =
- ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();
+ private static ImplementationBridgeHelpers.CosmosChangeFeedRequestOptionsHelper.CosmosChangeFeedRequestOptionsAccessor changeFeedOptionsAccessor() {
+ return ImplementationBridgeHelpers.CosmosChangeFeedRequestOptionsHelper.getCosmosChangeFeedRequestOptionsAccessor();
+ }
- private final static ImplementationBridgeHelpers.CosmosChangeFeedRequestOptionsHelper.CosmosChangeFeedRequestOptionsAccessor changeFeedRequestOptionsAccessor =
- ImplementationBridgeHelpers.CosmosChangeFeedRequestOptionsHelper.getCosmosChangeFeedRequestOptionsAccessor();
+ private static ImplementationBridgeHelpers.FeedResponseHelper.FeedResponseAccessor feedResponseAccessor() {
+ return ImplementationBridgeHelpers.FeedResponseHelper.getFeedResponseAccessor();
+ }
private static final int INITIAL_TOP_VALUE = -1;
@@ -89,9 +90,7 @@ public ChangeFeedQueryImpl(
this.documentsLink = Utils.joinPath(collectionLink, Paths.DOCUMENTS_PATH_SEGMENT);
this.options = requestOptions;
this.itemSerializer = client.getEffectiveItemSerializer(requestOptions.getCustomItemSerializer());
- this.operationContextAndListener = ImplementationBridgeHelpers
- .CosmosChangeFeedRequestOptionsHelper
- .getCosmosChangeFeedRequestOptionsAccessor()
+ this.operationContextAndListener = changeFeedOptionsAccessor()
.getOperationContext(options);
this.diagnosticsClientContext = diagnosticsClientContext;
@@ -122,13 +121,9 @@ public Flux> executeAsync() {
this.options.getMaxPrefetchPageCount(),
ModelBridgeInternal.getChangeFeedIsSplitHandlingDisabled(this.options),
this.options.isCompleteAfterAllCurrentChangesRetrieved(),
- ImplementationBridgeHelpers
- .CosmosChangeFeedRequestOptionsHelper
- .getCosmosChangeFeedRequestOptionsAccessor()
+ changeFeedOptionsAccessor()
.getEndLSN(this.options),
- ImplementationBridgeHelpers
- .CosmosChangeFeedRequestOptionsHelper
- .getCosmosChangeFeedRequestOptionsAccessor()
+ changeFeedOptionsAccessor()
.getOperationContext(this.options),
this.diagnosticsClientContext
);
@@ -138,7 +133,7 @@ private RxDocumentServiceRequest createDocumentServiceRequest() {
Map headers = new HashMap<>();
Map customOptions =
- ImplementationBridgeHelpers.CosmosChangeFeedRequestOptionsHelper.getCosmosChangeFeedRequestOptionsAccessor().getHeaders(this.options);
+ changeFeedOptionsAccessor().getHeaders(this.options);
if (customOptions != null) {
headers.putAll(customOptions);
}
@@ -194,7 +189,7 @@ private Mono> executeRequestAsync(RxDocumentServiceRequest reque
if (this.operationContextAndListener == null) {
return handlePerPartitionFailoverPrerequisites(request)
.flatMap(client::readFeed)
- .map(rsp -> feedResponseAccessor.createChangeFeedResponse(rsp, this.itemSerializer, klass, rsp.getCosmosDiagnostics()));
+ .map(rsp -> feedResponseAccessor().createChangeFeedResponse(rsp, this.itemSerializer, klass, rsp.getCosmosDiagnostics()));
} else {
final OperationListener listener = operationContextAndListener.getOperationListener();
final OperationContext operationContext = operationContextAndListener.getOperationContext();
@@ -208,7 +203,7 @@ private Mono> executeRequestAsync(RxDocumentServiceRequest reque
.map(rsp -> {
listener.responseListener(operationContext, rsp);
- final FeedResponse feedResponse = feedResponseAccessor.createChangeFeedResponse(
+ final FeedResponse feedResponse = feedResponseAccessor().createChangeFeedResponse(
rsp, this.itemSerializer, klass, rsp.getCosmosDiagnostics());
Map rspHeaders = feedResponse.getResponseHeaders();
@@ -258,8 +253,8 @@ private Mono handlePerPartitionFailoverPrerequisites(R
checkNotNull(collectionRoutingMapValueHolder, "Argument 'collectionRoutingMapValueHolder' cannot be null!");
checkNotNull(collectionRoutingMapValueHolder.v, "Argument 'collectionRoutingMapValueHolder.v' cannot be null!");
- changeFeedRequestOptionsAccessor.setPartitionKeyDefinition(options, documentCollectionValueHolder.v.getPartitionKey());
- changeFeedRequestOptionsAccessor.setCollectionRid(options, documentCollectionValueHolder.v.getResourceId());
+ changeFeedOptionsAccessor().setPartitionKeyDefinition(options, documentCollectionValueHolder.v.getPartitionKey());
+ changeFeedOptionsAccessor().setCollectionRid(options, documentCollectionValueHolder.v.getResourceId());
PartitionKeyRange preResolvedPartitionKeyRangeIfAny = this.client
.setPartitionKeyRangeForChangeFeedOperationRequestForPerPartitionAutomaticFailover(
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ClientSideRequestStatistics.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ClientSideRequestStatistics.java
index 2d1856fcf8ed..aa1f7974848b 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ClientSideRequestStatistics.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ClientSideRequestStatistics.java
@@ -38,6 +38,10 @@
@JsonSerialize(using = ClientSideRequestStatistics.ClientSideRequestStatisticsSerializer.class)
public class ClientSideRequestStatistics {
+ private static ImplementationBridgeHelpers.CosmosDiagnosticsContextHelper.CosmosDiagnosticsContextAccessor ctxAccessor() {
+ return ImplementationBridgeHelpers.CosmosDiagnosticsContextHelper.getCosmosDiagnosticsContextAccessor();
+ }
+
private static final int MAX_SUPPLEMENTAL_REQUESTS_FOR_TO_STRING = 10;
private final DiagnosticsClientContext.DiagnosticsClientConfig diagnosticsClientConfig;
private String activityId;
@@ -1163,15 +1167,12 @@ public static CosmosDiagnosticsSystemUsageSnapshot fetchSystemInformation() {
long freeMemory = runtime.freeMemory() / 1024;
long maxMemory = runtime.maxMemory() / 1024;
-
// TODO: other system related info also can be captured using a similar approach
String systemCpu = CpuMemoryMonitor
.getCpuLoad()
.toString();
- return ImplementationBridgeHelpers
- .CosmosDiagnosticsContextHelper
- .getCosmosDiagnosticsContextAccessor()
+ return ctxAccessor()
.createSystemUsageSnapshot(
systemCpu,
totalMemory - freeMemory + " KB",
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ConnectionPolicy.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ConnectionPolicy.java
index 9cd6441e4888..b93171e3bdcd 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ConnectionPolicy.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/ConnectionPolicy.java
@@ -24,13 +24,17 @@
* Represents the Connection policy associated with a Cosmos client in the Azure Cosmos DB service.
*/
public final class ConnectionPolicy {
+ private static ImplementationBridgeHelpers.DirectConnectionConfigHelper.DirectConnectionConfigAccessor directConnectionConfigAccessor() {
+ return ImplementationBridgeHelpers.DirectConnectionConfigHelper.getDirectConnectionConfigAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.Http2ConnectionConfigHelper.Http2ConnectionConfigAccessor httpCfgAccessor() {
+ return ImplementationBridgeHelpers.Http2ConnectionConfigHelper.getHttp2ConnectionConfigAccessor();
+ }
private static final int defaultGatewayMaxConnectionPoolSize = GatewayConnectionConfig.getDefaultConfig()
.getMaxConnectionPoolSize();
- private static final ImplementationBridgeHelpers.Http2ConnectionConfigHelper.Http2ConnectionConfigAccessor httpCfgAccessor =
- ImplementationBridgeHelpers.Http2ConnectionConfigHelper.getHttp2ConnectionConfigAccessor();
-
private ConnectionMode connectionMode;
private boolean endpointDiscoveryEnabled;
private boolean multipleWriteRegionsEnabled;
@@ -93,31 +97,23 @@ private ConnectionPolicy(
this.maxRequestsPerConnection = directConnectionConfig.getMaxRequestsPerConnection();
this.tcpNetworkRequestTimeout = directConnectionConfig.getNetworkRequestTimeout();
this.tcpConnectionEndpointRediscoveryEnabled = directConnectionConfig.isConnectionEndpointRediscoveryEnabled();
- this.ioThreadCountPerCoreFactor = ImplementationBridgeHelpers
- .DirectConnectionConfigHelper
- .getDirectConnectionConfigAccessor()
+ this.ioThreadCountPerCoreFactor = directConnectionConfigAccessor()
.getIoThreadCountPerCoreFactor(directConnectionConfig);
- this.ioThreadPriority = ImplementationBridgeHelpers
- .DirectConnectionConfigHelper
- .getDirectConnectionConfigAccessor()
+ this.ioThreadPriority = directConnectionConfigAccessor()
.getIoThreadPriority(directConnectionConfig);
this.idleHttpConnectionTimeout = gatewayConnectionConfig.getIdleConnectionTimeout();
this.maxConnectionPoolSize = gatewayConnectionConfig.getMaxConnectionPoolSize();
this.httpNetworkRequestTimeout = BridgeInternal.getNetworkRequestTimeoutFromGatewayConnectionConfig(gatewayConnectionConfig);
this.proxy = gatewayConnectionConfig.getProxy();
this.tcpHealthCheckTimeoutDetectionEnabled =
- ImplementationBridgeHelpers
- .DirectConnectionConfigHelper
- .getDirectConnectionConfigAccessor()
+ directConnectionConfigAccessor()
.isHealthCheckTimeoutDetectionEnabled(directConnectionConfig);
this.http2ConnectionConfig = gatewayConnectionConfig.getHttp2ConnectionConfig();
// NOTE: should be compared with COSMOS.MIN_CONNECTION_POOL_SIZE_PER_ENDPOINT
// read during client initialization before connections are created for the container
this.minConnectionPoolSizePerEndpoint =
- Math.max(ImplementationBridgeHelpers
- .DirectConnectionConfigHelper
- .getDirectConnectionConfigAccessor()
+ Math.max(directConnectionConfigAccessor()
.getMinConnectionPoolSizePerEndpoint(directConnectionConfig), Configs.getMinConnectionPoolSizePerEndpoint());
this.pendingAcquireMaxCount = Configs.getPendingAcquireMaxCount();
@@ -157,7 +153,6 @@ public ConnectionPolicy setTcpConnectionEndpointRediscoveryEnabled(boolean tcpCo
return this;
}
-
/**
* Gets the default connection policy.
*
@@ -699,7 +694,7 @@ public String toString() {
", minConnectionPoolSizePerEndpoint=" + minConnectionPoolSizePerEndpoint +
", openConnectionsConcurrency=" + openConnectionsConcurrency +
", aggressiveWarmupConcurrency=" + aggressiveWarmupConcurrency +
- ", http2ConnectionConfig=" + httpCfgAccessor.toDiagnosticsString(this.http2ConnectionConfig) +
+ ", http2ConnectionConfig=" + httpCfgAccessor().toDiagnosticsString(this.http2ConnectionConfig) +
", pendingAcquireMaxCount=" + Objects.toString(this.pendingAcquireMaxCount,"DEFAULT") +
'}';
}
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/CosmosQueryRequestOptionsBase.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/CosmosQueryRequestOptionsBase.java
index ec9168a3a36f..91aefb3a6951 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/CosmosQueryRequestOptionsBase.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/CosmosQueryRequestOptionsBase.java
@@ -29,9 +29,6 @@
* in the Azure Cosmos DB database service.
*/
public abstract class CosmosQueryRequestOptionsBase> implements OverridableRequestOptions {
- private final static ImplementationBridgeHelpers.CosmosDiagnosticsThresholdsHelper.CosmosDiagnosticsThresholdsAccessor thresholdsAccessor =
- ImplementationBridgeHelpers.CosmosDiagnosticsThresholdsHelper.getCosmosAsyncClientAccessor();
-
private ConsistencyLevel consistencyLevel;
private ReadConsistencyStrategy readConsistencyStrategy;
private String sessionToken;
@@ -373,7 +370,9 @@ public Duration getThresholdForDiagnosticsOnTracer() {
return CosmosDiagnosticsThresholds.DEFAULT_NON_POINT_OPERATION_LATENCY_THRESHOLD;
}
- return thresholdsAccessor.getNonPointReadLatencyThreshold(this.thresholds);
+ return ImplementationBridgeHelpers.CosmosDiagnosticsThresholdsHelper
+ .getCosmosDiagnosticsThresholdsAccessor()
+ .getNonPointReadLatencyThreshold(this.thresholds);
}
/**
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/CosmosQueryRequestOptionsImpl.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/CosmosQueryRequestOptionsImpl.java
index 9c51cf958137..ef1542701f5c 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/CosmosQueryRequestOptionsImpl.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/CosmosQueryRequestOptionsImpl.java
@@ -13,8 +13,6 @@
import java.util.List;
public final class CosmosQueryRequestOptionsImpl extends CosmosQueryRequestOptionsBase {
- private final static ImplementationBridgeHelpers.CosmosDiagnosticsThresholdsHelper.CosmosDiagnosticsThresholdsAccessor thresholdsAccessor =
- ImplementationBridgeHelpers.CosmosDiagnosticsThresholdsHelper.getCosmosAsyncClientAccessor();
private String partitionKeyRangeId;
private Boolean scanInQueryEnabled;
private Boolean emitVerboseTracesInQuery;
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/DefaultCosmosItemSerializer.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/DefaultCosmosItemSerializer.java
index 3c974ba7fdd2..566c3e7167eb 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/DefaultCosmosItemSerializer.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/DefaultCosmosItemSerializer.java
@@ -12,25 +12,9 @@
import static com.azure.cosmos.implementation.guava25.base.Preconditions.checkNotNull;
public class DefaultCosmosItemSerializer extends CosmosItemSerializer {
- ImplementationBridgeHelpers.CosmosItemSerializerHelper.CosmosItemSerializerAccessor itemSerializerAccessor =
- ImplementationBridgeHelpers
- .CosmosItemSerializerHelper
- .getCosmosItemSerializerAccessor();
- private final static ObjectMapper serializationInclusionModeAwareObjectMapper = Utils.getDocumentObjectMapper(
- Configs.getItemSerializationInclusionMode()
- );
- private final static ObjectMapper defaultSerializationInclusionModeObjectMapper = Utils.getSimpleObjectMapper();
-
- /**
- * Gets the default Cosmos item serializer. This serializer is used by default when no custom serializer is
- * specified on request options or the {@link CosmosClientBuilder}
- */
- public final static CosmosItemSerializer DEFAULT_SERIALIZER =
- new DefaultCosmosItemSerializer(serializationInclusionModeAwareObjectMapper);
-
- // guaranteed to sue serialization inclusion mode "Always"
- public final static CosmosItemSerializer INTERNAL_DEFAULT_SERIALIZER =
- new DefaultCosmosItemSerializer(defaultSerializationInclusionModeObjectMapper);
+ private static ImplementationBridgeHelpers.CosmosItemSerializerHelper.CosmosItemSerializerAccessor itemSerializerAccessor() {
+ return ImplementationBridgeHelpers.CosmosItemSerializerHelper.getCosmosItemSerializerAccessor();
+ }
private final ObjectMapper mapper;
@@ -38,8 +22,8 @@ public DefaultCosmosItemSerializer(ObjectMapper mapper) {
checkNotNull("mapper", "Argument 'mapper' must not be null.");
this.mapper = mapper;
- itemSerializerAccessor.setItemObjectMapper(this, mapper);
- itemSerializerAccessor.setShouldWrapSerializationExceptions(this, false);
+ itemSerializerAccessor().setItemObjectMapper(this, mapper);
+ itemSerializerAccessor().setShouldWrapSerializationExceptions(this, false);
}
/**
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/DiagnosticsProvider.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/DiagnosticsProvider.java
index 989d5ec4aa6c..95a2d0f7fb33 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/DiagnosticsProvider.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/DiagnosticsProvider.java
@@ -74,17 +74,25 @@
import static com.azure.cosmos.implementation.guava25.base.Preconditions.checkNotNull;
public final class DiagnosticsProvider {
- private static final ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.CosmosClientTelemetryConfigAccessor clientTelemetryConfigAccessor =
- ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.getCosmosClientTelemetryConfigAccessor();
- private static final ImplementationBridgeHelpers.CosmosDiagnosticsContextHelper.CosmosDiagnosticsContextAccessor ctxAccessor =
- ImplementationBridgeHelpers.CosmosDiagnosticsContextHelper.getCosmosDiagnosticsContextAccessor();
- private static final ImplementationBridgeHelpers.CosmosAsyncClientHelper.CosmosAsyncClientAccessor clientAccessor =
- ImplementationBridgeHelpers.CosmosAsyncClientHelper.getCosmosAsyncClientAccessor();
- private static final
- ImplementationBridgeHelpers.CosmosDiagnosticsHelper.CosmosDiagnosticsAccessor diagnosticsAccessor =
- ImplementationBridgeHelpers.CosmosDiagnosticsHelper.getCosmosDiagnosticsAccessor();
- private static final ImplementationBridgeHelpers.CosmosBatchResponseHelper.CosmosBatchResponseAccessor cosmosBatchResponseAccessor
- = ImplementationBridgeHelpers.CosmosBatchResponseHelper.getCosmosBatchResponseAccessor();
+ private static ImplementationBridgeHelpers.CosmosBatchResponseHelper.CosmosBatchResponseAccessor batchResponseAccessor() {
+ return ImplementationBridgeHelpers.CosmosBatchResponseHelper.getCosmosBatchResponseAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosDiagnosticsHelper.CosmosDiagnosticsAccessor diagAccessor() {
+ return ImplementationBridgeHelpers.CosmosDiagnosticsHelper.getCosmosDiagnosticsAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.CosmosClientTelemetryConfigAccessor clientTelemetryConfigAccessor() {
+ return ImplementationBridgeHelpers.CosmosClientTelemetryConfigHelper.getCosmosClientTelemetryConfigAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosDiagnosticsContextHelper.CosmosDiagnosticsContextAccessor ctxAccessor() {
+ return ImplementationBridgeHelpers.CosmosDiagnosticsContextHelper.getCosmosDiagnosticsContextAccessor();
+ }
+
+ private static ImplementationBridgeHelpers.CosmosAsyncClientHelper.CosmosAsyncClientAccessor clientAccessor() {
+ return ImplementationBridgeHelpers.CosmosAsyncClientHelper.getCosmosAsyncClientAccessor();
+ }
private static final Logger LOGGER = LoggerFactory.getLogger(DiagnosticsProvider.class);
private static final ObjectMapper mapper = new ObjectMapper();
@@ -115,7 +123,6 @@ public final class DiagnosticsProvider {
final Supplier samplingRateSnapshotSupplier;
-
public DiagnosticsProvider(
CosmosClientTelemetryConfig clientTelemetryConfig,
String clientId,
@@ -130,12 +137,12 @@ public DiagnosticsProvider(
this.telemetryConfig = clientTelemetryConfig;
this.samplingRateSnapshotSupplier = () -> isEnabled()
- ? clientTelemetryConfigAccessor.getSamplingRate(this.telemetryConfig)
+ ? clientTelemetryConfigAccessor().getSamplingRate(this.telemetryConfig)
: 0;
this.diagnosticHandlers = new ArrayList<>(
- clientTelemetryConfigAccessor.getDiagnosticHandlers(clientTelemetryConfig));
- Tracer tracerCandidate = clientTelemetryConfigAccessor.getOrCreateTracer(clientTelemetryConfig);
+ clientTelemetryConfigAccessor().getDiagnosticHandlers(clientTelemetryConfig));
+ Tracer tracerCandidate = clientTelemetryConfigAccessor().getOrCreateTracer(clientTelemetryConfig);
LOGGER.debug(
"TracerCandidate: {} - {}",
@@ -154,7 +161,7 @@ public DiagnosticsProvider(
}
if (this.tracer.isEnabled()) {
- if (clientTelemetryConfigAccessor.isLegacyTracingEnabled(clientTelemetryConfig)) {
+ if (clientTelemetryConfigAccessor().isLegacyTracingEnabled(clientTelemetryConfig)) {
this.cosmosTracer = new LegacyCosmosTracer(this.tracer);
} else {
this.cosmosTracer = new OpenTelemetryCosmosTracer(
@@ -255,7 +262,7 @@ public Context startSpan(
checkNotNull(spanName, "Argument 'spanName' must not be null.");
checkNotNull(cosmosCtx, "Argument 'cosmosCtx' must not be null.");
- ctxAccessor.startOperation(cosmosCtx);
+ ctxAccessor().startOperation(cosmosCtx);
Context local = Objects
.requireNonNull(context, "'context' cannot be null.")
.addData(COSMOS_DIAGNOSTICS_CONTEXT_KEY, cosmosCtx);
@@ -330,7 +337,7 @@ private void endSpanCore(
diagnostics,
null,
context,
- ctxAccessor.isEmptyCompletion(cosmosCtx),
+ ctxAccessor().isEmptyCompletion(cosmosCtx),
isSampledOut);
break;
case ON_NEXT:
@@ -370,7 +377,7 @@ private void endSpanCore(
}
effectiveDiagnostics = exception.getDiagnostics();
if (effectiveDiagnostics != null) {
- diagnosticsAccessor.isDiagnosticsCapturedInPagedFlux(effectiveDiagnostics).set(true);
+ diagAccessor().isDiagnosticsCapturedInPagedFlux(effectiveDiagnostics).set(true);
}
}
}
@@ -474,7 +481,7 @@ private void recordPageCore(
Integer actualItemCount,
Double requestCharge
) {
- ctxAccessor.recordOperation(
+ ctxAccessor().recordOperation(
cosmosCtx, 200, 0, actualItemCount, requestCharge, diagnostics, null);
}
@@ -575,7 +582,7 @@ public > Mono traceEnabledCosmosResponsePublisher
checkNotNull(client, "Argument 'client' must not be null.");
- String accountName = clientAccessor.getAccountTagValue(client);
+ String accountName = clientAccessor().getAccountTagValue(client);
return publisherWithDiagnostics(
resultPublisher,
@@ -596,7 +603,7 @@ public > Mono traceEnabledCosmosResponsePublisher
(r, samplingRate) -> {
CosmosDiagnostics diagnostics = r.getDiagnostics();
if (diagnostics != null) {
- diagnosticsAccessor.setSamplingRateSnapshot(diagnostics, samplingRate);
+ diagAccessor().setSamplingRateSnapshot(diagnostics, samplingRate);
}
return diagnostics;
@@ -624,7 +631,7 @@ public Mono traceEnabledBatchResponsePublishe
checkNotNull(client, "Argument 'client' must not be null.");
- String accountName = clientAccessor.getAccountTagValue(client);
+ String accountName = clientAccessor().getAccountTagValue(client);
return publisherWithDiagnostics(
resultPublisher,
@@ -645,15 +652,15 @@ public Mono traceEnabledBatchResponsePublishe
(r, samplingRate) -> {
CosmosDiagnostics diagnostics = r.getDiagnostics();
if (diagnostics != null) {
- diagnosticsAccessor.setSamplingRateSnapshot(diagnostics, samplingRate);
+ diagAccessor().setSamplingRateSnapshot(diagnostics, samplingRate);
}
return diagnostics;
},
- cosmosBatchResponseAccessor::getOpCountPerEvaluation,
- cosmosBatchResponseAccessor::getRetriedOpCountPerEvaluation,
- cosmosBatchResponseAccessor::getGlobalOpCount,
- cosmosBatchResponseAccessor::getTargetMaxMicroBatchSize,
+ batchResponseAccessor()::getOpCountPerEvaluation,
+ batchResponseAccessor()::getRetriedOpCountPerEvaluation,
+ batchResponseAccessor()::getGlobalOpCount,
+ batchResponseAccessor()::getTargetMaxMicroBatchSize,
requestOptions,
null);
}
@@ -674,7 +681,7 @@ public Mono> traceEnabledCosmosItemResponsePublisher(
checkNotNull(requestOptions, "Argument 'requestOptions' must not be null.");
checkNotNull(client, "Argument 'client' must not be null.");
- String accountName = clientAccessor.getAccountTagValue(client);
+ String accountName = clientAccessor().getAccountTagValue(client);
return publisherWithDiagnostics(
resultPublisher,
@@ -695,7 +702,7 @@ public Mono> traceEnabledCosmosItemResponsePublisher(
(r, samplingRate) -> {
CosmosDiagnostics diagnostics = r.getDiagnostics();
if (diagnostics != null) {
- diagnosticsAccessor.setSamplingRateSnapshot(diagnostics, samplingRate);
+ diagAccessor().setSamplingRateSnapshot(diagnostics, samplingRate);
}
return diagnostics;
@@ -719,13 +726,13 @@ private Mono> wrapReadManyFeedResponseWithTracingIfEnabled(
final double samplingRateSnapshot = this.samplingRateSnapshotSupplier.get();
final boolean isSampledOut = this.shouldSampleOutOperation(samplingRateSnapshot);
final CosmosDiagnosticsContext ctx = state.getDiagnosticsContextSnapshot();
- ctxAccessor.setSamplingRateSnapshot(ctx, samplingRateSnapshot, isSampledOut);
+ ctxAccessor().setSamplingRateSnapshot(ctx, samplingRateSnapshot, isSampledOut);
if (ctx == null || isSampledOut) {
return publisher.map(r -> {
CosmosDiagnostics diagnostics = r.getCosmosDiagnostics();
if (diagnostics != null) {
- diagnosticsAccessor.setSamplingRateSnapshot(diagnostics, samplingRateSnapshot);
+ diagAccessor().setSamplingRateSnapshot(diagnostics, samplingRateSnapshot);
}
return r;
});
@@ -740,8 +747,8 @@ private Mono> wrapReadManyFeedResponseWithTracingIfEnabled(
ctx.getAccountName(),
client,
ctx.getEffectiveConsistencyLevel(),
- ctxAccessor.getOperationType(ctx),
- ctxAccessor.getResourceType(ctx),
+ ctxAccessor().getOperationType(ctx),
+ ctxAccessor().getResourceType(ctx),
null,
itemIdentityList.size(),
(r) -> HttpConstants.StatusCodes.OK, // FeedResponse would only ever be created in success case
@@ -750,7 +757,7 @@ private Mono> wrapReadManyFeedResponseWithTracingIfEnabled(
(r, samplingRate) -> {
CosmosDiagnostics diagnostics = r.getCosmosDiagnostics();
if (diagnostics != null) {
- diagnosticsAccessor.setSamplingRateSnapshot(diagnostics, samplingRate);
+ diagAccessor().setSamplingRateSnapshot(diagnostics, samplingRate);
}
return diagnostics;
@@ -782,13 +789,13 @@ public static void recordFeedResponse(
response.getResults().size() : null;
if (diagnostics != null &&
- diagnosticsAccessor
+ diagAccessor()
.isDiagnosticsCapturedInPagedFlux(diagnostics)
.compareAndSet(false, true)) {
Double samplingRateSnapshot = samplingRateSnapshotSupplier.get();
if (samplingRateSnapshot != null && samplingRateSnapshot < 1) {
- diagnosticsAccessor
+ diagAccessor()
.setSamplingRateSnapshot(diagnostics, samplingRateSnapshot);
}
@@ -826,7 +833,7 @@ public Mono> traceEnabledReadManyResponsePublisher(
checkNotNull(requestOptions, "Argument 'requestOptions' must not be null.");
checkNotNull(client, "Argument 'client' must not be null.");
- String accountName = clientAccessor.getAccountTagValue(client);
+ String accountName = clientAccessor().getAccountTagValue(client);
return wrapReadManyFeedResponseWithTracingIfEnabled(
client,
@@ -851,7 +858,7 @@ public Flux runUnderSpanInContext(Flux publisher) {
}
public boolean shouldSampleOutOperation(CosmosPagedFluxOptions options) {
- final double samplingRateSnapshot = clientTelemetryConfigAccessor.getSamplingRate(this.telemetryConfig);
+ final double samplingRateSnapshot = clientTelemetryConfigAccessor().getSamplingRate(this.telemetryConfig);
boolean result = shouldSampleOutOperation(samplingRateSnapshot);
options.setSamplingRateSnapshot(samplingRateSnapshot, result);
return result;
@@ -883,10 +890,10 @@ private Mono diagnosticsEnabledPublisher(
Function globalOpCountPerEvaluationPeriodFunc,
Function targetMaxMicroBatchSizeFunc) {
- final double samplingRateSnapshot = isEnabled() ? clientTelemetryConfigAccessor.getSamplingRate(this.telemetryConfig) : 0;
+ final double samplingRateSnapshot = isEnabled() ? clientTelemetryConfigAccessor().getSamplingRate(this.telemetryConfig) : 0;
final boolean isSampledOut = this.shouldSampleOutOperation(samplingRateSnapshot);
if (cosmosCtx != null) {
- ctxAccessor.setSamplingRateSnapshot(cosmosCtx, samplingRateSnapshot, isSampledOut);
+ ctxAccessor().setSamplingRateSnapshot(cosmosCtx, samplingRateSnapshot, isSampledOut);
}
Optional