From 179028759f121edebb27216eff7164da3cb3358f Mon Sep 17 00:00:00 2001 From: Naveen Kumar Singh Date: Tue, 15 Jun 2021 17:41:39 -0400 Subject: [PATCH 1/6] Added gated test for client telemetry --- sdk/cosmos/azure-cosmos/pom.xml | 1 + .../implementation/AsyncDocumentClient.java | 6 +- .../implementation/RxDocumentClientImpl.java | 3 +- .../cosmos/implementation/TracerProvider.java | 4 +- .../AzureVMMetadata.java | 4 +- .../ClientTelemetry.java | 5 +- .../ClientTelemetryInfo.java | 2 +- .../ClientTelemetrySerializer.java | 2 +- .../MetricInfo.java | 2 +- .../ReportPayload.java | 2 +- .../azure/cosmos/util/CosmosPagedFlux.java | 4 +- .../com/azure/cosmos/ClientTelemetryTest.java | 65 +++++++++++++++++-- .../directconnectivity/ReflectionUtils.java | 10 ++- sdk/cosmos/tests.yml | 2 +- 14 files changed, 85 insertions(+), 27 deletions(-) rename sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/{clientTelemetry => clienttelemetry}/AzureVMMetadata.java (97%) rename sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/{clientTelemetry => clienttelemetry}/ClientTelemetry.java (98%) rename sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/{clientTelemetry => clienttelemetry}/ClientTelemetryInfo.java (98%) rename sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/{clientTelemetry => clienttelemetry}/ClientTelemetrySerializer.java (97%) rename sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/{clientTelemetry => clienttelemetry}/MetricInfo.java (96%) rename sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/{clientTelemetry => clienttelemetry}/ReportPayload.java (98%) diff --git a/sdk/cosmos/azure-cosmos/pom.xml b/sdk/cosmos/azure-cosmos/pom.xml index 994c0501e346..38229b9ae162 100644 --- a/sdk/cosmos/azure-cosmos/pom.xml +++ b/sdk/cosmos/azure-cosmos/pom.xml @@ -531,6 +531,7 @@ Licensed under the MIT License. --add-opens com.azure.cosmos/com.azure.cosmos.rx.proxy=ALL-UNNAMED --add-opens com.azure.cosmos/com.azure.cosmos.implementation.throughputControl=ALL-UNNAMED --add-opens com.azure.cosmos/com.azure.cosmos.implementation.throughputControl.controller.request=ALL-UNNAMED + --add-opens com.azure.cosmos/com.azure.cosmos.implementation.clienttelemetry=ALL-UNNAMED diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/AsyncDocumentClient.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/AsyncDocumentClient.java index ed7ad5a515ba..b2746262d106 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/AsyncDocumentClient.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/AsyncDocumentClient.java @@ -9,12 +9,9 @@ import com.azure.cosmos.implementation.apachecommons.lang.StringUtils; import com.azure.cosmos.implementation.batch.ServerBatchRequest; import com.azure.cosmos.CosmosPatchOperations; -import com.azure.cosmos.TransactionalBatchResponse; -import com.azure.cosmos.implementation.apachecommons.lang.StringUtils; -import com.azure.cosmos.implementation.batch.ServerBatchRequest; import com.azure.cosmos.implementation.caches.RxClientCollectionCache; import com.azure.cosmos.implementation.caches.RxPartitionKeyRangeCache; -import com.azure.cosmos.implementation.clientTelemetry.ClientTelemetry; +import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry; import com.azure.cosmos.implementation.query.PartitionedQueryExecutionInfo; import com.azure.cosmos.implementation.throughputControl.config.ThroughputControlGroupInternal; import com.azure.cosmos.models.CosmosChangeFeedRequestOptions; @@ -30,7 +27,6 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.List; -import java.util.Set; import java.util.concurrent.ConcurrentMap; /** 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 4f5bb2509656..5b317db27189 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 @@ -21,7 +21,7 @@ import com.azure.cosmos.implementation.caches.RxClientCollectionCache; import com.azure.cosmos.implementation.caches.RxCollectionCache; import com.azure.cosmos.implementation.caches.RxPartitionKeyRangeCache; -import com.azure.cosmos.implementation.clientTelemetry.ClientTelemetry; +import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry; import com.azure.cosmos.implementation.cpu.CpuMemoryListener; import com.azure.cosmos.implementation.cpu.CpuMemoryMonitor; import com.azure.cosmos.implementation.directconnectivity.GatewayServiceConfigurationReader; @@ -76,7 +76,6 @@ import java.net.URI; import java.net.URLEncoder; import java.nio.ByteBuffer; -import java.time.Duration; import java.time.Instant; import java.util.ArrayList; import java.util.Collections; diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/TracerProvider.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/TracerProvider.java index 6bbc0ffc5278..1985241f6d8f 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/TracerProvider.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/TracerProvider.java @@ -10,8 +10,8 @@ import com.azure.cosmos.CosmosDiagnostics; import com.azure.cosmos.CosmosException; import com.azure.cosmos.TransactionalBatchResponse; -import com.azure.cosmos.implementation.clientTelemetry.ClientTelemetry; -import com.azure.cosmos.implementation.clientTelemetry.ReportPayload; +import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry; +import com.azure.cosmos.implementation.clienttelemetry.ReportPayload; import com.azure.cosmos.models.CosmosItemResponse; import com.azure.cosmos.models.CosmosResponse; import com.azure.cosmos.models.ModelBridgeInternal; diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/AzureVMMetadata.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/AzureVMMetadata.java similarity index 97% rename from sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/AzureVMMetadata.java rename to sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/AzureVMMetadata.java index f37dbae35e6b..a94ea77720c2 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/AzureVMMetadata.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/AzureVMMetadata.java @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.cosmos.implementation.clientTelemetry; +package com.azure.cosmos.implementation.clienttelemetry; import com.azure.cosmos.implementation.apachecommons.lang.StringUtils; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @@ -85,4 +85,4 @@ public void setVmSize(String vmSize) { this.vmSize = vmSize; } } -} \ No newline at end of file +} 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 similarity index 98% rename from sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/ClientTelemetry.java rename to sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ClientTelemetry.java index 79ca089d55e5..19f9a60d6011 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 @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.cosmos.implementation.clientTelemetry; +package com.azure.cosmos.implementation.clienttelemetry; import com.azure.cosmos.BridgeInternal; import com.azure.cosmos.ConnectionMode; @@ -198,7 +198,8 @@ private Mono sendClientTelemetry() { HttpRequest httpRequest = new HttpRequest(HttpMethod.POST, targetEndpoint, targetEndpoint.getPort(), httpHeaders, fluxBytes); - Mono httpResponseMono = this.httpClient.send(httpRequest); + Mono httpResponseMono = this.httpClient.send(httpRequest, + Duration.ofSeconds(Configs.getHttpResponseTimeoutInSeconds())); return httpResponseMono.flatMap(response -> { if (response.statusCode() != HttpConstants.StatusCodes.OK) { logger.error("Client telemetry request did not succeeded, status code {}", diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/ClientTelemetryInfo.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ClientTelemetryInfo.java similarity index 98% rename from sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/ClientTelemetryInfo.java rename to sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ClientTelemetryInfo.java index a77a6e0e5735..764d84506c7d 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/ClientTelemetryInfo.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ClientTelemetryInfo.java @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.cosmos.implementation.clientTelemetry; +package com.azure.cosmos.implementation.clienttelemetry; import com.azure.cosmos.ConnectionMode; import com.fasterxml.jackson.databind.annotation.JsonSerialize; diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/ClientTelemetrySerializer.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ClientTelemetrySerializer.java similarity index 97% rename from sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/ClientTelemetrySerializer.java rename to sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ClientTelemetrySerializer.java index fb1ffc3c189b..c3e846034548 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/ClientTelemetrySerializer.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ClientTelemetrySerializer.java @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.cosmos.implementation.clientTelemetry; +package com.azure.cosmos.implementation.clienttelemetry; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerProvider; diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/MetricInfo.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/MetricInfo.java similarity index 96% rename from sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/MetricInfo.java rename to sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/MetricInfo.java index 18d7bf4ee262..5dd73c1d52fb 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/MetricInfo.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/MetricInfo.java @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.cosmos.implementation.clientTelemetry; +package com.azure.cosmos.implementation.clienttelemetry; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/ReportPayload.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ReportPayload.java similarity index 98% rename from sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/ReportPayload.java rename to sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ReportPayload.java index 2c5705967692..89775ef2b9ab 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clientTelemetry/ReportPayload.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/clienttelemetry/ReportPayload.java @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -package com.azure.cosmos.implementation.clientTelemetry; +package com.azure.cosmos.implementation.clienttelemetry; import com.azure.cosmos.ConsistencyLevel; import com.azure.cosmos.implementation.OperationType; diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/util/CosmosPagedFlux.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/util/CosmosPagedFlux.java index 76e0769f49bb..12ae8339a027 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/util/CosmosPagedFlux.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/util/CosmosPagedFlux.java @@ -17,8 +17,8 @@ import com.azure.cosmos.implementation.OperationType; import com.azure.cosmos.implementation.ResourceType; import com.azure.cosmos.implementation.TracerProvider; -import com.azure.cosmos.implementation.clientTelemetry.ClientTelemetry; -import com.azure.cosmos.implementation.clientTelemetry.ReportPayload; +import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry; +import com.azure.cosmos.implementation.clienttelemetry.ReportPayload; import com.azure.cosmos.models.FeedResponse; import org.HdrHistogram.ConcurrentDoubleHistogram; import reactor.core.CoreSubscriber; 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 24939ecf2925..65a0f10e99a7 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 @@ -6,22 +6,30 @@ import com.azure.cosmos.implementation.HttpConstants; import com.azure.cosmos.implementation.InternalObjectNode; import com.azure.cosmos.implementation.TestConfigurations; -import com.azure.cosmos.implementation.clientTelemetry.ClientTelemetry; -import com.azure.cosmos.implementation.clientTelemetry.ReportPayload; +import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry; +import com.azure.cosmos.implementation.clienttelemetry.ReportPayload; +import com.azure.cosmos.implementation.directconnectivity.ReflectionUtils; +import com.azure.cosmos.implementation.http.HttpClient; +import com.azure.cosmos.implementation.http.HttpResponse; import com.azure.cosmos.models.CosmosItemRequestOptions; import com.azure.cosmos.models.CosmosQueryRequestOptions; import com.azure.cosmos.models.FeedResponse; import com.azure.cosmos.models.PartitionKey; import com.azure.cosmos.rx.TestSuiteBase; +import org.mockito.ArgumentMatchers; +import org.mockito.Mockito; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; +import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Iterator; import java.util.UUID; +import java.util.concurrent.atomic.AtomicReference; import static org.assertj.core.api.Assertions.assertThat; @@ -86,10 +94,7 @@ public void operationsList(CosmosClient cosmosClient) throws Exception { cosmosClient.getDatabase(asyncContainer.getDatabase().getId()).getContainer(asyncContainer.getId()); ClientTelemetry clientTelemetry = cosmosClient.asyncClient().getContextClient().getClientTelemetry(); - Field backgroundRefreshLocationTimeIntervalInSecField = ClientTelemetry.class.getDeclaredField( - "clientTelemetrySchedulingSec"); - backgroundRefreshLocationTimeIntervalInSecField.setAccessible(true); - backgroundRefreshLocationTimeIntervalInSecField.setInt(clientTelemetry, 5); + setClientTelemetrySchedulingInSec(clientTelemetry, 5); clientTelemetry.init(); InternalObjectNode internalObjectNode = getInternalObjectNode(); @@ -205,6 +210,47 @@ public void clientTelemetryScheduling() { System.setProperty("COSMOS.CLIENT_TELEMETRY_SCHEDULING_IN_SECONDS", "600");// setting it back for other tests } + @Test(groups = {"non-emulator"}, timeOut = TIMEOUT) + public void clientTelemetryWithStageJunoEndpoint() throws InterruptedException, NoSuchFieldException, + IllegalAccessException { + CosmosClient cosmosClient = null; + try { + cosmosClient = new CosmosClientBuilder() + .endpoint(TestConfigurations.HOST) + .key(TestConfigurations.MASTER_KEY) + .clientTelemetryEnabled(true) + .buildClient(); + CosmosAsyncContainer asyncContainer = + getSharedMultiPartitionCosmosContainer(cosmosClient.asyncClient()); + CosmosContainer cosmosContainer = + cosmosClient.getDatabase(asyncContainer.getDatabase().getId()).getContainer(asyncContainer.getId()); + ClientTelemetry clientTelemetry = cosmosClient.asyncClient().getContextClient().getClientTelemetry(); + setClientTelemetrySchedulingInSec(clientTelemetry, 5); + clientTelemetry.init(); + + HttpClient httpClient = ReflectionUtils.getHttpClient(clientTelemetry); + HttpClient spyHttpClient = Mockito.spy(httpClient); + ReflectionUtils.setHttpClient(clientTelemetry, spyHttpClient); + + AtomicReference> httpResponseMono = new AtomicReference<>(); + Mockito.doAnswer(invocationOnMock -> { + httpResponseMono.set((Mono) invocationOnMock.callRealMethod()); + return httpResponseMono.get(); + }).when(spyHttpClient).send(ArgumentMatchers.any(), + ArgumentMatchers.any()); + InternalObjectNode internalObjectNode = getInternalObjectNode(); + cosmosContainer.createItem(internalObjectNode); + cosmosContainer.readItem(internalObjectNode.getId(), + new PartitionKey(internalObjectNode.getId()), + InternalObjectNode.class); + Thread.sleep(5000); + StepVerifier.create(httpResponseMono.get()).expectNextMatches(httpResponse -> + httpResponse.statusCode() == HttpConstants.StatusCodes.OK).verifyComplete(); + } finally { + safeCloseSyncClient(cosmosClient); + } + } + private InternalObjectNode getInternalObjectNode() { InternalObjectNode internalObjectNode = new InternalObjectNode(); String uuid = UUID.randomUUID().toString(); @@ -218,4 +264,11 @@ private void readClientTelemetry(ClientTelemetry telemetry) throws Exception { readHistogram.setAccessible(true); readHistogram.invoke(telemetry); } + + private void setClientTelemetrySchedulingInSec(ClientTelemetry clientTelemetry, int backgroundScheduling) throws IllegalAccessException, NoSuchFieldException { + Field backgroundRefreshLocationTimeIntervalInSecField = ClientTelemetry.class.getDeclaredField( + "clientTelemetrySchedulingSec"); + backgroundRefreshLocationTimeIntervalInSecField.setAccessible(true); + backgroundRefreshLocationTimeIntervalInSecField.setInt(clientTelemetry, backgroundScheduling); + } } diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/ReflectionUtils.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/ReflectionUtils.java index 07b15848a3c0..eb2d2500771a 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/ReflectionUtils.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/directconnectivity/ReflectionUtils.java @@ -24,12 +24,12 @@ import com.azure.cosmos.implementation.caches.RxClientCollectionCache; import com.azure.cosmos.implementation.caches.RxCollectionCache; import com.azure.cosmos.implementation.caches.RxPartitionKeyRangeCache; +import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry; import com.azure.cosmos.implementation.cpu.CpuMemoryListener; import com.azure.cosmos.implementation.cpu.CpuMemoryMonitor; import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdEndpoint; import com.azure.cosmos.implementation.http.HttpClient; import com.azure.cosmos.implementation.routing.CollectionRoutingMap; -import com.azure.cosmos.implementation.throughputControl.ThroughputControlTests; import com.azure.cosmos.implementation.throughputControl.ThroughputControlTrackingUnit; import com.azure.cosmos.implementation.throughputControl.ThroughputRequestThrottler; import com.azure.cosmos.implementation.throughputControl.controller.request.GlobalThroughputRequestController; @@ -308,4 +308,12 @@ public static ConcurrentHashMap ge ThroughputRequestThrottler requestThrottler) { return get(ConcurrentHashMap.class, requestThrottler, "trackingDictionary"); } + + public static HttpClient getHttpClient(ClientTelemetry telemetry) { + return get(HttpClient.class, telemetry, "httpClient"); + } + + public static void setHttpClient(ClientTelemetry telemetry, HttpClient httpClient) { + set(telemetry, httpClient, "httpClient"); + } } diff --git a/sdk/cosmos/tests.yml b/sdk/cosmos/tests.yml index 363e53f3ccc4..f22650e809f4 100644 --- a/sdk/cosmos/tests.yml +++ b/sdk/cosmos/tests.yml @@ -3,7 +3,7 @@ trigger: none variables: - template: ../../eng/pipelines/templates/variables/globals.yml - name: AdditionalArgs - value: '' + value: '-DCOSMOS.CLIENT_TELEMETRY_ENDPOINT=$(cosmos-client-telemetry-endpoint)' stages: - template: /eng/pipelines/templates/stages/archetype-sdk-tests.yml From 0a8117048b8b688df25ec5f8fbbb8500f959b806 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Singh Date: Tue, 15 Jun 2021 18:27:42 -0400 Subject: [PATCH 2/6] adding comments in test --- .../test/java/com/azure/cosmos/ClientTelemetryTest.java | 7 +++++++ 1 file changed, 7 insertions(+) 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 65a0f10e99a7..eff634bc590f 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 @@ -210,6 +210,7 @@ public void clientTelemetryScheduling() { System.setProperty("COSMOS.CLIENT_TELEMETRY_SCHEDULING_IN_SECONDS", "600");// setting it back for other tests } + @SuppressWarnings("unchecked") @Test(groups = {"non-emulator"}, timeOut = TIMEOUT) public void clientTelemetryWithStageJunoEndpoint() throws InterruptedException, NoSuchFieldException, IllegalAccessException { @@ -228,6 +229,12 @@ public void clientTelemetryWithStageJunoEndpoint() throws InterruptedException, setClientTelemetrySchedulingInSec(clientTelemetry, 5); clientTelemetry.init(); + // If this test need to run on local machine please add below env property, + // in test env we add the env property with cosmos-client-telemetry-endpoint variable in tests.yml, + // which gets its value from key vault TestSecrets-Cosmos + + // System.setProperty("COSMOS.CLIENT_TELEMETRY_ENDPOINT", "https://tools-staging.cosmos.azure.com/api/clienttelemetry/trace"); + HttpClient httpClient = ReflectionUtils.getHttpClient(clientTelemetry); HttpClient spyHttpClient = Mockito.spy(httpClient); ReflectionUtils.setHttpClient(clientTelemetry, spyHttpClient); From 262cb86af234f9f1d2a99694ac82d33ed3e4d150 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Singh Date: Wed, 16 Jun 2021 16:36:47 -0400 Subject: [PATCH 3/6] fixing module-info error --- sdk/cosmos/azure-cosmos/src/main/java/module-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/cosmos/azure-cosmos/src/main/java/module-info.java b/sdk/cosmos/azure-cosmos/src/main/java/module-info.java index efbeda7edd17..a077b29c482e 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/module-info.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/module-info.java @@ -50,7 +50,7 @@ opens com.azure.cosmos.implementation.query.metrics to com.fasterxml.jackson.databind; opens com.azure.cosmos.implementation.query.orderbyquery to com.fasterxml.jackson.databind; opens com.azure.cosmos.implementation.routing to com.fasterxml.jackson.databind; - opens com.azure.cosmos.implementation.clientTelemetry to com.fasterxml.jackson.databind; + opens com.azure.cosmos.implementation.clienttelemetry to com.fasterxml.jackson.databind; opens com.azure.cosmos.models to com.fasterxml.jackson.databind; opens com.azure.cosmos.util to com.fasterxml.jackson.databind; opens com.azure.cosmos.implementation.throughputControl to com.fasterxml.jackson.databind; From 4b439af9d1a43002111d3167048a14352b6940e1 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Singh Date: Wed, 16 Jun 2021 17:25:34 -0400 Subject: [PATCH 4/6] fixing spot bugs --- .../src/main/resources/spotbugs/spotbugs-exclude.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 426a165f9677..9bf271ef7d63 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 @@ -1965,7 +1965,7 @@ - + From 8ffa74d3099f779315e984b9263ca2e1446718a2 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Singh Date: Thu, 17 Jun 2021 17:08:08 -0400 Subject: [PATCH 5/6] Adding extra logging to check test failure --- .../java/com/azure/cosmos/ClientTelemetryTest.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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 eff634bc590f..3b6890e8f458 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 @@ -5,6 +5,7 @@ import com.azure.cosmos.implementation.Configs; import com.azure.cosmos.implementation.HttpConstants; import com.azure.cosmos.implementation.InternalObjectNode; +import com.azure.cosmos.implementation.RxDocumentClientImpl; import com.azure.cosmos.implementation.TestConfigurations; import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry; import com.azure.cosmos.implementation.clienttelemetry.ReportPayload; @@ -233,7 +234,10 @@ public void clientTelemetryWithStageJunoEndpoint() throws InterruptedException, // in test env we add the env property with cosmos-client-telemetry-endpoint variable in tests.yml, // which gets its value from key vault TestSecrets-Cosmos - // System.setProperty("COSMOS.CLIENT_TELEMETRY_ENDPOINT", "https://tools-staging.cosmos.azure.com/api/clienttelemetry/trace"); + logger.info("clientTelemetryWithStageJunoEndpoint client telemetry endpoint {}", System.getProperty("COSMOS.CLIENT_TELEMETRY_ENDPOINT").split("/")[2]); + logger.info("clientTelemetryWithStageJunoEndpoint cosmos account name {}", + ReflectionUtils.getGlobalEndpointManager((RxDocumentClientImpl) CosmosBridgeInternal.getAsyncDocumentClient(cosmosClient)).getLatestDatabaseAccount().getResourceId()); + HttpClient httpClient = ReflectionUtils.getHttpClient(clientTelemetry); HttpClient spyHttpClient = Mockito.spy(httpClient); @@ -251,8 +255,10 @@ public void clientTelemetryWithStageJunoEndpoint() throws InterruptedException, new PartitionKey(internalObjectNode.getId()), InternalObjectNode.class); Thread.sleep(5000); - StepVerifier.create(httpResponseMono.get()).expectNextMatches(httpResponse -> - httpResponse.statusCode() == HttpConstants.StatusCodes.OK).verifyComplete(); + StepVerifier.create(httpResponseMono.get()).expectNextMatches(httpResponse -> { + logger.info("clientTelemetryWithStageJunoEndpoint statusCode from juno {}", httpResponse.statusCode()); + return httpResponse.statusCode() == HttpConstants.StatusCodes.OK; + }).verifyComplete(); } finally { safeCloseSyncClient(cosmosClient); } From 5b7c7f50c257ea2b11ca9668ed5194e3afe1f992 Mon Sep 17 00:00:00 2001 From: Naveen Kumar Singh Date: Wed, 21 Jul 2021 18:20:19 -0400 Subject: [PATCH 6/6] fixing test case --- .../java/com/azure/cosmos/ClientTelemetryTest.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) 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 d0b5aadeea1d..1b1b97ab73f8 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 @@ -12,6 +12,7 @@ import com.azure.cosmos.implementation.directconnectivity.ReflectionUtils; import com.azure.cosmos.implementation.http.HttpClient; import com.azure.cosmos.implementation.http.HttpResponse; +import com.azure.cosmos.models.CosmosContainerProperties; import com.azure.cosmos.models.CosmosItemRequestOptions; import com.azure.cosmos.models.CosmosQueryRequestOptions; import com.azure.cosmos.models.FeedResponse; @@ -216,6 +217,7 @@ public void clientTelemetryScheduling() { public void clientTelemetryWithStageJunoEndpoint() throws InterruptedException, NoSuchFieldException, IllegalAccessException { CosmosClient cosmosClient = null; + String databaseId = UUID.randomUUID().toString(); try { String whiteListedAccountForTelemetry = System.getProperty("COSMOS.CLIENT_TELEMETRY_COSMOS_ACCOUNT"); String[] credentialList = whiteListedAccountForTelemetry.split(";"); @@ -227,10 +229,14 @@ public void clientTelemetryWithStageJunoEndpoint() throws InterruptedException, .key(key) .clientTelemetryEnabled(true) .buildClient(); - CosmosAsyncContainer asyncContainer = - getSharedMultiPartitionCosmosContainer(cosmosClient.asyncClient()); + String containerId = UUID.randomUUID().toString(); + cosmosClient.createDatabase(databaseId); + + CosmosContainerProperties containerProperties = + new CosmosContainerProperties(containerId, "/id"); + cosmosClient.getDatabase(databaseId).createContainer(containerProperties); CosmosContainer cosmosContainer = - cosmosClient.getDatabase(asyncContainer.getDatabase().getId()).getContainer(asyncContainer.getId()); + cosmosClient.getDatabase(databaseId).getContainer(containerId); ClientTelemetry clientTelemetry = cosmosClient.asyncClient().getContextClient().getClientTelemetry(); setClientTelemetrySchedulingInSec(clientTelemetry, 5); clientTelemetry.init(); @@ -265,6 +271,7 @@ public void clientTelemetryWithStageJunoEndpoint() throws InterruptedException, return httpResponse.statusCode() == HttpConstants.StatusCodes.OK; }).verifyComplete(); } finally { + cosmosClient.getDatabase(databaseId).delete(); safeCloseSyncClient(cosmosClient); } }