Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
import com.azure.cosmos.encryption.CosmosEncryptionAsyncContainer;
import com.azure.cosmos.encryption.implementation.Constants;
import com.azure.cosmos.encryption.implementation.EncryptionImplementationBridgeHelpers;
import com.azure.cosmos.implementation.ImplementationBridgeHelpers;
import com.azure.cosmos.encryption.implementation.EncryptionProcessor;
import com.azure.cosmos.encryption.implementation.EncryptionUtils;
import com.azure.cosmos.encryption.implementation.mdesrc.cryptography.EncryptionType;
import com.azure.cosmos.encryption.implementation.mdesrc.cryptography.MicrosoftDataEncryptionException;
import com.azure.cosmos.implementation.DefaultCosmosItemSerializer;
import com.azure.cosmos.implementation.Utils;
import com.azure.cosmos.implementation.apachecommons.lang.StringUtils;
import com.azure.cosmos.implementation.apachecommons.lang.tuple.Pair;
Expand All @@ -33,6 +33,11 @@ public final class SqlQuerySpecWithEncryption {
private final HashMap<String, SqlParameter> encryptionParamMap = new HashMap<>();
private final EncryptionImplementationBridgeHelpers.CosmosEncryptionAsyncContainerHelper.CosmosEncryptionAsyncContainerAccessor cosmosEncryptionAsyncContainerAccessor = EncryptionImplementationBridgeHelpers.CosmosEncryptionAsyncContainerHelper.getCosmosEncryptionAsyncContainerAccessor();

private static CosmosItemSerializer internalDefaultSerializer() {
return ImplementationBridgeHelpers.CosmosItemSerializerHelper
.getCosmosItemSerializerAccessor().getInternalDefaultSerializer();
}

/**
* Creates a new instance of SQL query spec with encryption.
*
Expand Down Expand Up @@ -86,10 +91,10 @@ Mono<Void> addEncryptionParameterAsync(String path, SqlParameter sqlParameter,
}
byte[] valueByte =
EncryptionUtils.serializeJsonToByteArray(
Comment thread
jeet1995 marked this conversation as resolved.
DefaultCosmosItemSerializer.INTERNAL_DEFAULT_SERIALIZER,
internalDefaultSerializer(),
sqlParameter.getValue(Object.class));
JsonNode itemJObj = Utils.parse(
valueByte, JsonNode.class, DefaultCosmosItemSerializer.INTERNAL_DEFAULT_SERIALIZER);
valueByte, JsonNode.class, internalDefaultSerializer());
Pair<EncryptionProcessor.TypeMarker, byte[]> typeMarkerPair =
EncryptionProcessor.toByteArray(itemJObj);
byte[] cipherText =
Expand Down

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions sdk/cosmos/azure-cosmos/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#### Bugs Fixed
* Fixed an issue where change feed with `startFrom` point-in-time returned `400` on merged partitions by enabling the `CHANGE_FEED_WITH_START_TIME_POST_MERGE` SDK capability.
* Fixed JVM `<clinit>` 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)

#### Other Changes

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<CosmosAsyncContainer, CosmosAsyncContainer> DEFAULT_CONTAINER_FACTORY =
(originalContainer) -> originalContainer;
Expand Down Expand Up @@ -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<Permission> permissionList = new ArrayList<>();
Expand Down Expand Up @@ -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);
}
Expand All @@ -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)
);
Expand Down Expand Up @@ -475,7 +477,7 @@ CosmosPagedFlux<CosmosDatabaseProperties> readAllDatabases(CosmosQueryRequestOpt
null,
ResourceType.Database,
OperationType.ReadFeed,
queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);
Expand All @@ -484,7 +486,7 @@ CosmosPagedFlux<CosmosDatabaseProperties> readAllDatabases(CosmosQueryRequestOpt

return getDocClientWrapper().readDatabases(state)
.map(response ->
feedResponseAccessor.createFeedResponse(
feedResponseAccessor().createFeedResponse(
ModelBridgeInternal.getCosmosDatabasePropertiesFromV2Results(response.getResults()),
response.getResponseHeaders(),
response.getCosmosDiagnostics()));
Expand All @@ -504,7 +506,6 @@ public CosmosPagedFlux<CosmosDatabaseProperties> readAllDatabases() {
return readAllDatabases(new CosmosQueryRequestOptions());
}


/**
* Query for databases.
* <br/>
Expand Down Expand Up @@ -662,22 +663,21 @@ private CosmosPagedFlux<CosmosDatabaseProperties> queryDatabasesInternal(
null,
ResourceType.Database,
OperationType.Query,
queryOptionsAccessor.getQueryNameOrDefault(nonNullOptions, spanName),
queryOptionsAccessor().getQueryNameOrDefault(nonNullOptions, spanName),
nonNullOptions,
pagedFluxOptions
);

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<CosmosDatabaseResponse> createDatabaseIfNotExistsInternal(CosmosAsyncDatabase database,
ThroughputProperties throughputProperties, Context context) {
String spanName = "createDatabaseIfNotExists." + database.getId();
Expand Down Expand Up @@ -765,7 +765,7 @@ ReadConsistencyStrategy getEffectiveReadConsistencyStrategy(
OperationType operationType,
ReadConsistencyStrategy desiredReadConsistencyStrategyOfOperation) {

return readConsistencyStrategyAccessor.getEffectiveReadConsistencyStrategy(
return readConsistencyStrategyAccessor().getEffectiveReadConsistencyStrategy(
resourceType,
operationType,
desiredReadConsistencyStrategyOfOperation,
Expand All @@ -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();
}
Expand All @@ -805,15 +804,15 @@ boolean isTransportLevelTracingEnabled() {
this.clientTelemetryConfig
: DEFAULT_TELEMETRY_CONFIG;

if (telemetryConfigAccessor.isLegacyTracingEnabled(effectiveConfig)) {
if (clientTelemetryConfigAccessor().isLegacyTracingEnabled(effectiveConfig)) {
return false;
}

if (this.getConnectionPolicy().getConnectionMode() != ConnectionMode.DIRECT) {
return false;
}

return telemetryConfigAccessor.isTransportLevelTracingEnabled(effectiveConfig);
return clientTelemetryConfigAccessor().isTransportLevelTracingEnabled(effectiveConfig);
}

void recordOpenConnectionsAndInitCachesCompleted(List<CosmosContainerIdentity> cosmosContainerIdentities) {
Expand Down Expand Up @@ -859,13 +858,13 @@ public String getAccountTagValue(CosmosAsyncClient client) {

@Override
public EnumSet<TagName> getMetricTagNames(CosmosAsyncClient client) {
return telemetryConfigAccessor
return clientTelemetryConfigAccessor()
.getMetricTagNames(client.clientTelemetryConfig);
}

@Override
public EnumSet<MetricCategory> getMetricCategories(CosmosAsyncClient client) {
return telemetryConfigAccessor
return clientTelemetryConfigAccessor()
.getMetricCategories(client.clientTelemetryConfig);
}

Expand Down Expand Up @@ -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);
}

Expand Down
Loading
Loading