diff --git a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml
index e174f0ebcfd7..866ee29ccb8f 100755
--- a/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml
+++ b/eng/code-quality-reports/src/main/resources/spotbugs/spotbugs-exclude.xml
@@ -1123,6 +1123,13 @@
+
+
+
+
+
+
+
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxDocumentClientImpl.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxDocumentClientImpl.java
index 730c5dd8d40f..c7fd60df9313 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxDocumentClientImpl.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/RxDocumentClientImpl.java
@@ -457,16 +457,16 @@ public void init(CosmosClientMetadataCachesSnapshot metadataCachesSnapshot, Func
collectionCache);
updateGatewayProxy();
- if (this.connectionPolicy.getConnectionMode() == ConnectionMode.GATEWAY) {
- this.storeModel = this.gatewayProxy;
- } else {
- this.initializeDirectConnectivity();
- }
clientTelemetry = new ClientTelemetry(null, UUID.randomUUID().toString(),
ManagementFactory.getRuntimeMXBean().getName(), userAgentContainer.getUserAgent(),
connectionPolicy.getConnectionMode(), globalEndpointManager.getLatestDatabaseAccount().getId(),
null, null, this.reactorHttpClient, connectionPolicy.isClientTelemetryEnabled(), this, this.connectionPolicy.getPreferredRegions());
clientTelemetry.init();
+ if (this.connectionPolicy.getConnectionMode() == ConnectionMode.GATEWAY) {
+ this.storeModel = this.gatewayProxy;
+ } else {
+ this.initializeDirectConnectivity();
+ }
this.queryPlanCache = new ConcurrentHashMap<>();
this.retryPolicy.setRxCollectionCache(this.collectionCache);
} catch (Exception e) {
@@ -503,7 +503,8 @@ private void initializeDirectConnectivity() {
this.connectionPolicy,
// this.maxConcurrentConnectionOpenRequests,
this.userAgentContainer,
- this.connectionSharingAcrossClientsEnabled
+ this.connectionSharingAcrossClientsEnabled,
+ this.clientTelemetry
);
this.createStoreModel(true);
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ClientTelemetry.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ClientTelemetry.java
index 9d43dd12f194..f570393466c4 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ClientTelemetry.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ClientTelemetry.java
@@ -61,6 +61,11 @@ public class ClientTelemetry {
public final static String REQUEST_CHARGE_NAME = "RequestCharge";
public final static String REQUEST_CHARGE_UNIT = "RU";
+ public final static String TCP_NEW_CHANNEL_LATENCY_NAME = "TcpNewChannelOpenLatency";
+ public final static String TCP_NEW_CHANNEL_LATENCY_UNIT = "MilliSecond";
+ public final static int TCP_NEW_CHANNEL_LATENCY_MAX_MILLI_SEC = 300000;
+ public final static int TCP_NEW_CHANNEL_LATENCY_PRECISION = 2;
+
public final static int CPU_MAX = 100;
public final static int CPU_PRECISION = 2;
private final static String CPU_NAME = "CPU";
@@ -136,6 +141,10 @@ public static void recordValue(ConcurrentDoubleHistogram doubleHistogram, double
}
}
+ public boolean isClientTelemetryEnabled() {
+ return isClientTelemetryEnabled;
+ }
+
public void init() {
loadAzureVmMetaData();
sendClientTelemetry().subscribe();
@@ -266,6 +275,7 @@ private static T parse(String itemResponseBodyAsString, Class itemClassTy
}
private void clearDataForNextRun() {
+ this.clientTelemetryInfo.getSystemInfoMap().clear();
this.clientTelemetryInfo.getOperationInfoMap().clear();
this.clientTelemetryInfo.getCacheRefreshInfoMap().clear();
for (ConcurrentDoubleHistogram histogram : this.clientTelemetryInfo.getSystemInfoMap().values()) {
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/RntbdTransportClient.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/RntbdTransportClient.java
index e29ae460c70d..911210f6e58a 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/RntbdTransportClient.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/RntbdTransportClient.java
@@ -11,6 +11,7 @@
import com.azure.cosmos.implementation.RequestTimeline;
import com.azure.cosmos.implementation.RxDocumentServiceRequest;
import com.azure.cosmos.implementation.UserAgentContainer;
+import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry;
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdEndpoint;
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdObjectMapper;
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdRequestArgs;
@@ -88,6 +89,7 @@ public class RntbdTransportClient extends TransportClient {
private final RntbdEndpoint.Provider endpointProvider;
private final long id;
private final Tag tag;
+ private boolean channelAcquisitionContextEnabled;
// endregion
@@ -106,12 +108,14 @@ public RntbdTransportClient(
final Configs configs,
final ConnectionPolicy connectionPolicy,
final UserAgentContainer userAgent,
- final IAddressResolver addressResolver) {
+ final IAddressResolver addressResolver,
+ final ClientTelemetry clientTelemetry) {
this(
new Options.Builder(connectionPolicy).userAgent(userAgent).build(),
configs.getSslContext(),
- addressResolver);
+ addressResolver,
+ clientTelemetry);
}
RntbdTransportClient(final RntbdEndpoint.Provider endpointProvider) {
@@ -123,16 +127,19 @@ public RntbdTransportClient(
RntbdTransportClient(
final Options options,
final SslContext sslContext,
- final IAddressResolver addressResolver) {
+ final IAddressResolver addressResolver,
+ final ClientTelemetry clientTelemetry) {
this.endpointProvider = new RntbdServiceEndpoint.Provider(
this,
options,
checkNotNull(sslContext, "expected non-null sslContext"),
- addressResolver);
+ addressResolver,
+ clientTelemetry);
this.id = instanceCount.incrementAndGet();
this.tag = RntbdTransportClient.tag(this.id);
+ this.channelAcquisitionContextEnabled = options.channelAcquisitionContextEnabled;
}
// endregion
@@ -229,7 +236,9 @@ public Mono invokeStoreAsync(final Uri addressUri, final RxDocume
response.setRequestPayloadLength(request.getContentLength());
response.setRntbdChannelTaskQueueSize(record.channelTaskQueueLength());
response.setRntbdPendingRequestSize(record.pendingRequestQueueSize());
- response.setChannelAcquisitionTimeline(record.getChannelAcquisitionTimeline());
+ if(this.channelAcquisitionContextEnabled) {
+ response.setChannelAcquisitionTimeline(record.getChannelAcquisitionTimeline());
+ }
}
})).onErrorMap(throwable -> {
@@ -263,7 +272,9 @@ public Mono invokeStoreAsync(final Uri addressUri, final RxDocume
BridgeInternal.setRntbdPendingRequestQueueSize(cosmosException, record.pendingRequestQueueSize());
BridgeInternal.setChannelTaskQueueSize(cosmosException, record.channelTaskQueueLength());
BridgeInternal.setSendingRequestStarted(cosmosException, record.hasSendingRequestStarted());
- BridgeInternal.setChannelAcquisitionTimeline(cosmosException, record.getChannelAcquisitionTimeline());
+ if(this.channelAcquisitionContextEnabled) {
+ BridgeInternal.setChannelAcquisitionTimeline(cosmosException, record.getChannelAcquisitionTimeline());
+ }
return cosmosException;
});
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/SharedTransportClient.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/SharedTransportClient.java
index e9b622e35089..5b332f14b586 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/SharedTransportClient.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/SharedTransportClient.java
@@ -9,6 +9,7 @@
import com.azure.cosmos.implementation.LifeCycleUtils;
import com.azure.cosmos.implementation.RxDocumentServiceRequest;
import com.azure.cosmos.implementation.UserAgentContainer;
+import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;
@@ -37,13 +38,14 @@ public static TransportClient getOrCreateInstance(
ConnectionPolicy connectionPolicy,
UserAgentContainer userAgent,
DiagnosticsClientContext.DiagnosticsClientConfig diagnosticsClientConfig,
- IAddressResolver addressResolver) {
+ IAddressResolver addressResolver,
+ ClientTelemetry clientTelemetry) {
synchronized (SharedTransportClient.class) {
if (sharedTransportClient == null) {
assert counter.get() == 0;
logger.info("creating a new shared RntbdTransportClient");
- sharedTransportClient = new SharedTransportClient(protocol, configs, connectionPolicy, userAgent, addressResolver);
+ sharedTransportClient = new SharedTransportClient(protocol, configs, connectionPolicy, userAgent, addressResolver, clientTelemetry);
} else {
logger.info("Reusing an instance of RntbdTransportClient");
}
@@ -62,11 +64,12 @@ private SharedTransportClient(
Configs configs,
ConnectionPolicy connectionPolicy,
UserAgentContainer userAgent,
- IAddressResolver addressResolver) {
+ IAddressResolver addressResolver,
+ ClientTelemetry clientTelemetry) {
if (protocol == Protocol.TCP) {
this.rntbdOptions =
new RntbdTransportClient.Options.Builder(connectionPolicy).userAgent(userAgent).build();
- this.transportClient = new RntbdTransportClient(rntbdOptions, configs.getSslContext(), addressResolver);
+ this.transportClient = new RntbdTransportClient(rntbdOptions, configs.getSslContext(), addressResolver, clientTelemetry);
} else if (protocol == Protocol.HTTPS){
this.rntbdOptions = null;
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreClientFactory.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreClientFactory.java
index 4d6468fff20b..3d9f0e6ccddf 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreClientFactory.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/StoreClientFactory.java
@@ -9,6 +9,7 @@
import com.azure.cosmos.implementation.IAuthorizationTokenProvider;
import com.azure.cosmos.implementation.SessionContainer;
import com.azure.cosmos.implementation.UserAgentContainer;
+import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry;
// We suppress the "try" warning here because the close() method's signature
// allows it to throw InterruptedException which is strongly advised against
@@ -21,6 +22,7 @@ public class StoreClientFactory implements AutoCloseable {
private final Configs configs;
private final TransportClient transportClient;
private volatile boolean isClosed;
+ private final ClientTelemetry clientTelemetry;
public StoreClientFactory(
IAddressResolver addressResolver,
@@ -28,9 +30,11 @@ public StoreClientFactory(
Configs configs,
ConnectionPolicy connectionPolicy,
UserAgentContainer userAgent,
- boolean enableTransportClientSharing) {
+ boolean enableTransportClientSharing,
+ ClientTelemetry clientTelemetry) {
this.configs = configs;
+ this.clientTelemetry = clientTelemetry;
Protocol protocol = configs.getProtocol();
if (enableTransportClientSharing) {
this.transportClient = SharedTransportClient.getOrCreateInstance(
@@ -39,7 +43,8 @@ public StoreClientFactory(
connectionPolicy,
userAgent,
diagnosticsClientConfig,
- addressResolver);
+ addressResolver,
+ clientTelemetry);
} else {
if (protocol == Protocol.HTTPS) {
this.transportClient = new HttpTransportClient(configs, connectionPolicy, userAgent);
@@ -47,7 +52,7 @@ public StoreClientFactory(
RntbdTransportClient.Options rntbdOptions =
new RntbdTransportClient.Options.Builder(connectionPolicy).userAgent(userAgent).build();
- this.transportClient = new RntbdTransportClient(rntbdOptions, configs.getSslContext(), addressResolver);
+ this.transportClient = new RntbdTransportClient(rntbdOptions, configs.getSslContext(), addressResolver, clientTelemetry);
diagnosticsClientConfig.withRntbdOptions(rntbdOptions);
} else {
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdChannelAcquisitionTimeline.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdChannelAcquisitionTimeline.java
index 4692a64dbe6c..24aa9c6ca8b0 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdChannelAcquisitionTimeline.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdChannelAcquisitionTimeline.java
@@ -3,9 +3,15 @@
package com.azure.cosmos.implementation.directconnectivity.rntbd;
+import com.azure.cosmos.BridgeInternal;
+import com.azure.cosmos.implementation.Configs;
+import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry;
+import com.azure.cosmos.implementation.clienttelemetry.ReportPayload;
+import org.HdrHistogram.ConcurrentDoubleHistogram;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
@@ -25,11 +31,12 @@ public List getEvents() {
public static RntbdChannelAcquisitionEvent startNewEvent(
RntbdChannelAcquisitionTimeline timeline,
- RntbdChannelAcquisitionEventType eventType) {
+ RntbdChannelAcquisitionEventType eventType,
+ ClientTelemetry clientTelemetry) {
if (timeline != null) {
RntbdChannelAcquisitionEvent newEvent = new RntbdChannelAcquisitionEvent(eventType, Instant.now());
- timeline.addNewEvent(newEvent);
+ timeline.addNewEvent(newEvent, clientTelemetry);
return newEvent;
}
@@ -39,20 +46,37 @@ public static RntbdChannelAcquisitionEvent startNewEvent(
public static RntbdPollChannelEvent startNewPollEvent(
RntbdChannelAcquisitionTimeline timeline,
int availableChannels,
- int acquiredChannels) {
+ int acquiredChannels,
+ ClientTelemetry clientTelemetry) {
if (timeline != null) {
RntbdPollChannelEvent newEvent = new RntbdPollChannelEvent(availableChannels, acquiredChannels, Instant.now());
- timeline.addNewEvent(newEvent);
+ timeline.addNewEvent(newEvent, clientTelemetry);
return newEvent;
}
return null;
}
- private void addNewEvent(RntbdChannelAcquisitionEvent event) {
+ private void addNewEvent(RntbdChannelAcquisitionEvent event, ClientTelemetry clientTelemetry) {
if (this.currentEvent != null) {
this.currentEvent.complete(event.getCreatedTime());
+ if(clientTelemetry!= null && Configs.isClientTelemetryEnabled(clientTelemetry.isClientTelemetryEnabled())) {
+ if (event.getEventType().equals(RntbdChannelAcquisitionEventType.ATTEMPT_TO_CREATE_NEW_CHANNEL_COMPLETE)) {
+ ReportPayload reportPayload = new ReportPayload(ClientTelemetry.TCP_NEW_CHANNEL_LATENCY_NAME,
+ ClientTelemetry.TCP_NEW_CHANNEL_LATENCY_UNIT);
+ ConcurrentDoubleHistogram newChannelLatencyHistogram =
+ clientTelemetry.getClientTelemetryInfo().getSystemInfoMap().get(reportPayload);
+ if (newChannelLatencyHistogram == null) {
+ newChannelLatencyHistogram =
+ new ConcurrentDoubleHistogram(ClientTelemetry.TCP_NEW_CHANNEL_LATENCY_MAX_MILLI_SEC,
+ ClientTelemetry.TCP_NEW_CHANNEL_LATENCY_PRECISION);
+ clientTelemetry.getClientTelemetryInfo().getSystemInfoMap().put(reportPayload, newChannelLatencyHistogram);
+ }
+ ClientTelemetry.recordValue(newChannelLatencyHistogram,
+ Duration.between(this.currentEvent.getCreatedTime(), this.currentEvent.getCompleteTime()).toMillis());
+ }
+ }
}
this.events.add(event);
this.currentEvent = event;
diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdClientChannelPool.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdClientChannelPool.java
index 66b4487540ab..cd952fe94741 100644
--- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdClientChannelPool.java
+++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdClientChannelPool.java
@@ -3,6 +3,7 @@
package com.azure.cosmos.implementation.directconnectivity.rntbd;
+import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry;
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdEndpoint.Config;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
@@ -181,22 +182,23 @@ public final class RntbdClientChannelPool implements ChannelPool {
Comparator.comparingLong((task) -> task.originalPromise.getExpiryTimeInNanos()));
private final ScheduledFuture> pendingAcquisitionExpirationFuture;
-
+ private final ClientTelemetry clientTelemetry;
/**
* Initializes a newly created {@link RntbdClientChannelPool} instance.
*
* @param bootstrap the {@link Bootstrap} that is used for connections.
* @param config the {@link Config} that is used for the channel pool instance created.
*/
- RntbdClientChannelPool(final RntbdServiceEndpoint endpoint, final Bootstrap bootstrap, final Config config) {
- this(endpoint, bootstrap, config, new RntbdClientChannelHealthChecker(config));
+ RntbdClientChannelPool(final RntbdServiceEndpoint endpoint, final Bootstrap bootstrap, final Config config, final ClientTelemetry clientTelemetry) {
+ this(endpoint, bootstrap, config, new RntbdClientChannelHealthChecker(config), clientTelemetry);
}
private RntbdClientChannelPool(
final RntbdServiceEndpoint endpoint,
final Bootstrap bootstrap,
final Config config,
- final RntbdClientChannelHealthChecker healthChecker) {
+ final RntbdClientChannelHealthChecker healthChecker,
+ final ClientTelemetry clientTelemetry) {
checkNotNull(endpoint, "expected non-null endpoint");
checkNotNull(bootstrap, "expected non-null bootstrap");
@@ -239,7 +241,8 @@ public void onTimeout(AcquireListener task) {
task.originalPromise.setFailure(ACQUISITION_TIMEOUT);
RntbdChannelAcquisitionTimeline.startNewEvent(
task.originalPromise.getChannelAcquisitionTimeline(),
- RntbdChannelAcquisitionEventType.PENDING_TIME_OUT);
+ RntbdChannelAcquisitionEventType.PENDING_TIME_OUT,
+ clientTelemetry);
}
};
@@ -255,6 +258,7 @@ public void onTimeout(AcquireListener task) {
} else {
this.pendingAcquisitionExpirationFuture = null;
}
+ this.clientTelemetry = clientTelemetry;
// this.idleStateDetectionScheduledFuture = this.executor.scheduleAtFixedRate(
// () -> {
@@ -640,7 +644,8 @@ private void acquireChannel(final ChannelPromiseWithExpiryTime promise) {
RntbdChannelAcquisitionTimeline.startNewEvent(
channelAcquisitionTimeline,
- RntbdChannelAcquisitionEventType.ATTEMPT_TO_CREATE_NEW_CHANNEL);
+ RntbdChannelAcquisitionEventType.ATTEMPT_TO_CREATE_NEW_CHANNEL,
+ clientTelemetry);
final ChannelFuture future = this.bootstrap.clone().attr(POOL_KEY, this).connect();
@@ -743,7 +748,8 @@ private void addTaskToPendingAcquisitionQueue(ChannelPromiseWithExpiryTime promi
} else {
RntbdChannelAcquisitionTimeline.startNewEvent(
promise.getChannelAcquisitionTimeline(),
- RntbdChannelAcquisitionEventType.ADD_TO_PENDING_QUEUE);
+ RntbdChannelAcquisitionEventType.ADD_TO_PENDING_QUEUE,
+ clientTelemetry);
}
}
}
@@ -1118,7 +1124,8 @@ private void notifyChannelConnect(final ChannelFuture future, final Promise connectedChannel = this.channelPool.acquire(requestRecord.getChannelAcquisitionTimeline());
@@ -476,12 +478,14 @@ public static final class Provider implements RntbdEndpoint.Provider {
private final RntbdRequestTimer requestTimer;
private final RntbdTransportClient transportClient;
private final IAddressResolver addressResolver;
+ private final ClientTelemetry clientTelemetry;
public Provider(
final RntbdTransportClient transportClient,
final Options options,
final SslContext sslContext,
- final IAddressResolver addressResolver) {
+ final IAddressResolver addressResolver,
+ final ClientTelemetry clientTelemetry) {
checkNotNull(transportClient, "expected non-null provider");
checkNotNull(options, "expected non-null options");
@@ -507,6 +511,7 @@ public Provider(
this.endpoints = new ConcurrentHashMap<>();
this.evictions = new AtomicInteger();
this.closed = new AtomicBoolean();
+ this.clientTelemetry = clientTelemetry;
this.monitoring = new RntbdEndpointMonitoringProvider(this);
this.monitoring.init();
}
@@ -575,7 +580,8 @@ public RntbdEndpoint get(final URI physicalAddress) {
this.config,
this.eventLoopGroup,
this.requestTimer,
- physicalAddress));
+ physicalAddress,
+ this.clientTelemetry));
}
@Override
diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/ClientTelemetryTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/ClientTelemetryTest.java
index 7fe930406957..efbcc63bf40a 100644
--- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/ClientTelemetryTest.java
+++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/ClientTelemetryTest.java
@@ -126,12 +126,20 @@ public void operationsList(CosmosClient cosmosClient) throws Exception {
cosmosContainer.deleteItem(internalObjectNode.getId(), new PartitionKey(internalObjectNode.getId()),
new CosmosItemRequestOptions()); // delete operation
+ readClientTelemetry(clientTelemetry);
//Verifying above 5 operation, we should have 10 operation (5 latency, 5 request charge)
String json = Utils.getSimpleObjectMapper().writeValueAsString(clientTelemetry);
if(cosmosClient.asyncClient().getConnectionPolicy().getConnectionMode().equals(ConnectionMode.GATEWAY)) {
validateCTJsonFields(json, true, true);
} else {
validateCTJsonFields(json, false, false);
+ assertThat(clientTelemetry.getClientTelemetryInfo().getSystemInfoMap().size()).isEqualTo(3);
+ for(ReportPayload reportPayload : clientTelemetry.getClientTelemetryInfo().getSystemInfoMap().keySet()) {
+ if(reportPayload.getMetricInfo().getMetricsName().equals(ClientTelemetry.TCP_NEW_CHANNEL_LATENCY_NAME)) {
+ //Validate that we have open at least 1 channel
+ assertThat(reportPayload.getMetricInfo().getCount()).isGreaterThanOrEqualTo(1);
+ }
+ }
}
assertThat(clientTelemetry.getClientTelemetryInfo().getOperationInfoMap().size()).isEqualTo(10);
diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/ConnectionStateListenerTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/ConnectionStateListenerTest.java
index adc999835704..35f1ee4f00bd 100644
--- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/ConnectionStateListenerTest.java
+++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/ConnectionStateListenerTest.java
@@ -74,7 +74,8 @@ public void connectionStateListener_OnConnectionEvent(
config,
connectionPolicy,
new UserAgentContainer(),
- addressResolver);
+ addressResolver,
+ null);
RxDocumentServiceRequest req =
RxDocumentServiceRequest.create(mockDiagnosticsClientContext(), OperationType.Create, ResourceType.Document,
diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/RntbdServiceEndpointTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/RntbdServiceEndpointTest.java
index 4f2226f6be13..8a3c96a9bd99 100644
--- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/RntbdServiceEndpointTest.java
+++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/RntbdServiceEndpointTest.java
@@ -26,7 +26,7 @@ public void endpointCloseOnIdleEndpointTimeout() throws Exception {
ConnectionPolicy connectionPolicy = new ConnectionPolicy(directConnectionConfig);
final RntbdTransportClient.Options options = new RntbdTransportClient.Options.Builder(connectionPolicy).build();
final SslContext sslContext = SslContextBuilder.forClient().build();
- RntbdTransportClient transportClient = new RntbdTransportClient(options, sslContext, null);
+ RntbdTransportClient transportClient = new RntbdTransportClient(options, sslContext, null, null);
URI uri = new URI(TestConfigurations.HOST);
List uriList = new ArrayList<>();
diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/RntbdTransportClientTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/RntbdTransportClientTest.java
index 7eeb07a67d7d..0ad4a29d44bb 100644
--- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/RntbdTransportClientTest.java
+++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/RntbdTransportClientTest.java
@@ -619,7 +619,7 @@ public void verifyGoneResponseMapsToGoneException() throws Exception {
final RntbdTransportClient.Options options = new RntbdTransportClient.Options.Builder(connectionPolicy).build();
final SslContext sslContext = SslContextBuilder.forClient().build();
- try (final RntbdTransportClient transportClient = new RntbdTransportClient(options, sslContext, null)) {
+ try (final RntbdTransportClient transportClient = new RntbdTransportClient(options, sslContext, null, null)) {
final BaseAuthorizationTokenProvider authorizationTokenProvider = new BaseAuthorizationTokenProvider(
new AzureKeyCredential(RntbdTestConfiguration.AccountKey)
diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/SharedTransportClientTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/SharedTransportClientTest.java
index 50498c0c5818..06f572212d21 100644
--- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/SharedTransportClientTest.java
+++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/SharedTransportClientTest.java
@@ -17,8 +17,8 @@ public void createTwoClient_SharedReference() {
TransportClient transportClient1 = null;
TransportClient transportClient2 = null;
try {
- transportClient1 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null);
- transportClient2 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null);
+ transportClient1 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null, null);
+ transportClient2 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null, null);
assertThat(transportClient2).isSameAs(transportClient1);
assertThat(((SharedTransportClient) transportClient1).getReferenceCounter()).isEqualTo(2);
@@ -33,8 +33,8 @@ public void createTwoHttpsClient_SharedReference() {
TransportClient transportClient1 = null;
TransportClient transportClient2 = null;
try {
- transportClient1 = SharedTransportClient.getOrCreateInstance(Protocol.HTTPS, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null);
- transportClient2 = SharedTransportClient.getOrCreateInstance(Protocol.HTTPS, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null);
+ transportClient1 = SharedTransportClient.getOrCreateInstance(Protocol.HTTPS, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null, null);
+ transportClient2 = SharedTransportClient.getOrCreateInstance(Protocol.HTTPS, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null, null);
assertThat(transportClient2).isSameAs(transportClient1);
assertThat(((SharedTransportClient) transportClient1).getReferenceCounter()).isEqualTo(2);
@@ -51,12 +51,12 @@ public void createTwoClient_CloseOne_CreateAnotherClient_SharedReference() throw
TransportClient transportClient3 = null;
try {
- transportClient1 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null);
- transportClient2 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null);
+ transportClient1 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null, null);
+ transportClient2 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null, null);
transportClient2.close();
assertThat(((SharedTransportClient) transportClient1).getReferenceCounter()).isEqualTo(1);
- transportClient3 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null);
+ transportClient3 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null, null);
assertThat(transportClient3).isSameAs(transportClient1);
assertThat(((SharedTransportClient) transportClient1).getReferenceCounter()).isEqualTo(2);
} finally {
@@ -72,13 +72,13 @@ public void createTwoClient_CloseBoth_ReCreateClient_NewReference() throws Excep
TransportClient transportClient3 = null;
try {
- transportClient1 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null);
- transportClient2 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null);
+ transportClient1 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null, null);
+ transportClient2 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null, null);
transportClient1.close();
transportClient2.close();
assertThat(((SharedTransportClient) transportClient1).getReferenceCounter()).isEqualTo(0);
- transportClient3 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null);
+ transportClient3 = SharedTransportClient.getOrCreateInstance(Protocol.TCP, new Configs(), ConnectionPolicy.getDefaultPolicy(), new UserAgentContainer(), new DiagnosticsClientContext.DiagnosticsClientConfig(), null, null);
assertThat(transportClient3).isNotSameAs(transportClient1);
assertThat(((SharedTransportClient) transportClient3).getReferenceCounter()).isEqualTo(1);
} finally {