Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extracting vmId form Azure instance metadata #27692

Merged
merged 17 commits into from
Mar 16, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions sdk/cosmos/azure-cosmos/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
#### Key Bugs Fixes
* Added `decodeTime` in `CosmosDiagnostics` - See [PR 22808](https://github.com/Azure/azure-sdk-for-java/pull/22808)

#### Features Added
FabianMeiswinkel marked this conversation as resolved.
Show resolved Hide resolved
* Added the "VM Unique ID" - see [Accessing and Using Azure VM Unique ID](https://azure.microsoft.com/en-us/blog/accessing-and-using-azure-vm-unique-id/) - to the request diagnostics. This information helps to simplify investigating any network issues between an application hosted in Azure and the corresponding Cosmos DB service endpoint. - See [PR 27692](https://github.com/Azure/azure-sdk-for-java/pull/27692)

### 4.27.0 (2022-03-10)
#### Key Bugs Fixes
* Fixed an issue in `CosmosPagedIterable` resulting in excessive memory consumption due to unbounded prefetch of pages when converting the `CosmosPagedIterable` into an `Iterator<FeedResponse<T>>`. - See [PR 27237](https://github.com/Azure/azure-sdk-for-java/pull/27237) and [PR 27299](https://github.com/Azure/azure-sdk-for-java/pull/27299)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
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.CosmosAuthorizationTokenResolver;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ public void serialize(DiagnosticsClientContext clientContext, JsonGenerator gene
generator.writeStartObject();
try {
generator.writeNumberField("id", clientContext.getConfig().getClientId());
generator.writeStringField("machineId", clientContext.getConfig().getMachineId());
generator.writeStringField("connectionMode", clientContext.getConfig().getConnectionMode().toString());
generator.writeNumberField("numberOfClients", clientContext.getConfig().getActiveClientsCount());
generator.writeObjectFieldStart("connCfg");
Expand Down Expand Up @@ -87,6 +88,11 @@ class DiagnosticsClientConfig {
private RntbdTransportClient.Options options;
private String rntbdConfigAsString;
private ConnectionMode connectionMode;
private String machineId;

public void withMachineId(String machineId) {
this.machineId = machineId;
FabianMeiswinkel marked this conversation as resolved.
Show resolved Hide resolved
}

public void withActiveClientCounter(AtomicInteger activeClientsCnt) {
this.activeClientsCnt = activeClientsCnt;
Expand Down Expand Up @@ -178,6 +184,8 @@ public int getClientId() {
return this.clientId;
}

public String getMachineId() { return this.machineId; }

public int getActiveClientsCount() {
return this.activeClientsCnt != null ? this.activeClientsCnt.get() : -1;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -110,6 +110,7 @@
*/
public class RxDocumentClientImpl implements AsyncDocumentClient, IAuthorizationTokenProvider, CpuMemoryListener,
DiagnosticsClientContext {
private static final String tempMachineId = "uuid:UUID.randomUUID().toString()";
FabianMeiswinkel marked this conversation as resolved.
Show resolved Hide resolved
private static final AtomicInteger activeClientsCnt = new AtomicInteger(0);
private static final AtomicInteger clientIdGenerator = new AtomicInteger(0);
private static final Range<String> RANGE_INCLUDING_ALL_PARTITION_KEY_RANGES = new Range<>(
Expand Down Expand Up @@ -457,11 +458,12 @@ public void init(CosmosClientMetadataCachesSnapshot metadataCachesSnapshot, Func
collectionCache);

updateGatewayProxy();
clientTelemetry = new ClientTelemetry(null, UUID.randomUUID().toString(),
clientTelemetry = new ClientTelemetry(tempMachineId, 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();
this.diagnosticsClientConfig.withMachineId(clientTelemetry.getClientTelemetryInfo().getMachineId());
if (this.connectionPolicy.getConnectionMode() == ConnectionMode.GATEWAY) {
this.storeModel = this.gatewayProxy;
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
import com.azure.cosmos.CosmosAsyncClient;
import com.azure.cosmos.CosmosDiagnostics;
import com.azure.cosmos.CosmosException;
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.DirectBridgeInternal;
import com.azure.cosmos.models.CosmosBatchResponse;
import com.azure.cosmos.models.CosmosItemResponse;
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -29,6 +29,10 @@ public String getVmSize() {
return compute != null ? compute.getVmSize() : StringUtils.EMPTY;
}

public String getVmId() {
return compute != null ? compute.getVmId() : StringUtils.EMPTY;
}

public Compute getCompute() {
return compute;
}
Expand All @@ -44,6 +48,7 @@ public static class Compute {
private String azEnvironment;
private String osType;
private String vmSize;
private String vmId;

public String getSku() {
return sku;
Expand Down Expand Up @@ -84,5 +89,13 @@ public String getVmSize() {
public void setVmSize(String vmSize) {
this.vmSize = vmSize;
}

public String getVmId() {
return vmId;
}

public void setVmId(String vmId) {
this.vmId = vmId;
}
}
}
Original file line number Diff line number Diff line change
@@ -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;
FabianMeiswinkel marked this conversation as resolved.
Show resolved Hide resolved

import com.azure.cosmos.BridgeInternal;
import com.azure.cosmos.ConnectionMode;
Expand Down Expand Up @@ -98,7 +98,8 @@ public class ClientTelemetry {
private final IAuthorizationTokenProvider tokenProvider;
private final String globalDatabaseAccountName;

public ClientTelemetry(Boolean acceleratedNetworking,
public ClientTelemetry(String machineId,
Boolean acceleratedNetworking,
String clientId,
String processId,
String userAgent,
Expand All @@ -111,7 +112,7 @@ public ClientTelemetry(Boolean acceleratedNetworking,
IAuthorizationTokenProvider tokenProvider,
List<String> preferredRegions
) {
clientTelemetryInfo = new ClientTelemetryInfo(clientId, processId, userAgent, connectionMode,
clientTelemetryInfo = new ClientTelemetryInfo(machineId, clientId, processId, userAgent, connectionMode,
globalDatabaseAccountName, applicationRegion, hostEnvInfo, acceleratedNetworking, preferredRegions);
this.isClosed = false;
this.httpClient = httpClient;
Expand Down Expand Up @@ -256,6 +257,7 @@ private void loadAzureVmMetaData() {
httpResponseMono.flatMap(response -> response.bodyAsString()).map(metadataJson -> parse(metadataJson,
AzureVMMetadata.class)).doOnSuccess(azureVMMetadata -> {
this.clientTelemetryInfo.setApplicationRegion(azureVMMetadata.getLocation());
this.clientTelemetryInfo.setMachineId(azureVMMetadata.getVmId());
this.clientTelemetryInfo.setHostEnvInfo(azureVMMetadata.getOsType() + "|" + azureVMMetadata.getSku() +
"|" + azureVMMetadata.getVmSize() + "|" + azureVMMetadata.getAzEnvironment());
}).onErrorResume(throwable -> {
Expand Down
Original file line number Diff line number Diff line change
@@ -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.azure.cosmos.implementation.Configs;
Expand All @@ -14,6 +14,7 @@
@JsonSerialize(using = ClientTelemetrySerializer.class)
public class ClientTelemetryInfo {
private String timeStamp;
private String machineId;
private String clientId;
private String processId;
private String userAgent;
Expand All @@ -28,7 +29,8 @@ public class ClientTelemetryInfo {
private Map<ReportPayload, ConcurrentDoubleHistogram> cacheRefreshInfoMap;
private Map<ReportPayload, ConcurrentDoubleHistogram> operationInfoMap;

public ClientTelemetryInfo(String clientId,
public ClientTelemetryInfo(String machineId,
String clientId,
String processId,
String userAgent,
ConnectionMode connectionMode,
Expand All @@ -37,6 +39,7 @@ public ClientTelemetryInfo(String clientId,
String hostEnvInfo,
Boolean acceleratedNetworking,
List<String> preferredRegions) {
this.machineId = machineId;
FabianMeiswinkel marked this conversation as resolved.
Show resolved Hide resolved
this.clientId = clientId;
this.processId = processId;
this.userAgent = userAgent;
Expand Down Expand Up @@ -108,6 +111,14 @@ public void setApplicationRegion(String applicationRegion) {
this.applicationRegion = applicationRegion;
}

public String getMachineId() {
return machineId;
FabianMeiswinkel marked this conversation as resolved.
Show resolved Hide resolved
}

public void setMachineId(String machineId) {
this.machineId = "vmId:" + machineId;
FabianMeiswinkel marked this conversation as resolved.
Show resolved Hide resolved
}

public String getHostEnvInfo() {
return hostEnvInfo;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -20,6 +20,7 @@ public class ClientTelemetrySerializer extends StdSerializer<ClientTelemetryInfo
public void serialize(ClientTelemetryInfo telemetry, JsonGenerator generator, SerializerProvider serializerProvider) throws IOException {
generator.writeStartObject();
generator.writeStringField("timeStamp", telemetry.getTimeStamp());
generator.writeStringField("machineId", telemetry.getMachineId());
generator.writeStringField("clientId", telemetry.getClientId());

if (telemetry.getProcessId() != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +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.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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +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 com.azure.cosmos.implementation.clientTelemetry.ClientTelemetry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +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;
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@

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 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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

package com.azure.cosmos.implementation.directconnectivity.rntbd;

import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry;
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.azure.cosmos.CosmosException;
import com.azure.cosmos.implementation.GoneException;
import com.azure.cosmos.implementation.HttpConstants;
import com.azure.cosmos.implementation.clienttelemetry.ClientTelemetry;
import com.azure.cosmos.implementation.clientTelemetry.ClientTelemetry;
import com.azure.cosmos.implementation.directconnectivity.IAddressResolver;
import com.azure.cosmos.implementation.directconnectivity.RntbdTransportClient;
import com.azure.cosmos.implementation.directconnectivity.TransportException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
import com.azure.cosmos.implementation.ResourceType;
import com.azure.cosmos.implementation.SerializationDiagnosticsContext;
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.implementation.query.QueryInfo;
import com.azure.cosmos.models.FeedResponse;
import com.fasterxml.jackson.core.JsonProcessingException;
Expand Down
2 changes: 1 addition & 1 deletion sdk/cosmos/azure-cosmos/src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import com.azure.cosmos.implementation.RxDocumentClientImpl;
import com.azure.cosmos.implementation.TestConfigurations;
import com.azure.cosmos.implementation.Utils;
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;
Expand Down Expand Up @@ -244,6 +244,7 @@ public void clientTelemetryWithStageJunoEndpoint() throws InterruptedException,
String databaseId = UUID.randomUUID().toString();
try {
String whiteListedAccountForTelemetry = System.getProperty("COSMOS.CLIENT_TELEMETRY_COSMOS_ACCOUNT");
assertThat(whiteListedAccountForTelemetry).isNotNull();
String[] credentialList = whiteListedAccountForTelemetry.split(";");
String host = credentialList[0].substring("AccountEndpoint=".length());
String key = credentialList[1].substring("AccountKey=".length());
Expand Down Expand Up @@ -295,7 +296,9 @@ public void clientTelemetryWithStageJunoEndpoint() throws InterruptedException,
return httpResponse.statusCode() == HttpConstants.StatusCodes.OK;
}).verifyComplete();
} finally {
cosmosClient.getDatabase(databaseId).delete();
if (cosmosClient != null && cosmosClient.getDatabase(databaseId) != null) {
FabianMeiswinkel marked this conversation as resolved.
Show resolved Hide resolved
cosmosClient.getDatabase(databaseId).delete();
}
safeCloseSyncClient(cosmosClient);
}
}
Expand Down
Loading