This is an automated email from the ASF dual-hosted git repository. mblow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 39ac77d88a3a24246057079de6d42f2742680e4b Author: Hussain Towaileb <[email protected]> AuthorDate: Wed Oct 22 20:25:36 2025 +0300 [NO ISSUE][EXT]: change azure cloud client to accept both clients Ext-ref: MB-69069 Change-Id: I1ee625e30cccf44aeebfa4d5ae5aa99968942ac5 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20511 Tested-by: Jenkins <[email protected]> Reviewed-by: Hussain Towaileb <[email protected]> Reviewed-by: Michael Blow <[email protected]> --- .../azure/blobstorage/AzBlobStorageCloudClient.java | 6 +++--- .../writer/AzureExternalFileWriterFactory.java | 2 +- .../util/azure/blob_storage/AzureUtils.java | 21 ++++++++++++++++++--- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/clients/azure/blobstorage/AzBlobStorageCloudClient.java b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/clients/azure/blobstorage/AzBlobStorageCloudClient.java index 0bd16a867b..1cd0556789 100644 --- a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/clients/azure/blobstorage/AzBlobStorageCloudClient.java +++ b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/clients/azure/blobstorage/AzBlobStorageCloudClient.java @@ -100,13 +100,13 @@ public class AzBlobStorageCloudClient implements ICloudClient { private static final Logger LOGGER = LogManager.getLogger(); public AzBlobStorageCloudClient(AzBlobStorageClientConfig config, ICloudGuardian guardian) { - this(config, buildClient(config), guardian); + this(config, buildClient(config), buildAsyncClient(config), guardian); } public AzBlobStorageCloudClient(AzBlobStorageClientConfig config, BlobServiceClient blobServiceClient, - ICloudGuardian guardian) { + BlobServiceAsyncClient asyncBlobServiceClient, ICloudGuardian guardian) { this.blobContainerClient = blobServiceClient.getBlobContainerClient(config.getBucket()); - this.blobContainerAsyncClient = buildAsyncClient(config).getBlobContainerAsyncClient(config.getBucket()); + this.blobContainerAsyncClient = asyncBlobServiceClient.getBlobContainerAsyncClient(config.getBucket()); this.config = config; this.guardian = guardian; long profilerInterval = config.getProfilerLogInterval(); diff --git a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AzureExternalFileWriterFactory.java b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AzureExternalFileWriterFactory.java index fd71ffc63c..d9eb16dd0f 100644 --- a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AzureExternalFileWriterFactory.java +++ b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AzureExternalFileWriterFactory.java @@ -68,7 +68,7 @@ public final class AzureExternalFileWriterFactory extends AbstractCloudExternalF ICloudClient createCloudClient(IApplicationContext appCtx) throws CompilationException { AzBlobStorageClientConfig config = AzBlobStorageClientConfig.of(configuration, writeBufferSize); return new AzBlobStorageCloudClient(config, AzureUtils.buildAzureBlobClient(appCtx, configuration), - ICloudGuardian.NoOpCloudGuardian.INSTANCE); + AzureUtils.buildAzureBlobAsyncClient(appCtx, configuration), ICloudGuardian.NoOpCloudGuardian.INSTANCE); } @Override diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/azure/blob_storage/AzureUtils.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/azure/blob_storage/AzureUtils.java index ac407f4dc8..4d2a2dd116 100644 --- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/azure/blob_storage/AzureUtils.java +++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/util/azure/blob_storage/AzureUtils.java @@ -77,6 +77,7 @@ import com.azure.identity.ClientCertificateCredentialBuilder; import com.azure.identity.ClientSecretCredentialBuilder; import com.azure.identity.ManagedIdentityCredentialBuilder; import com.azure.storage.blob.BlobContainerClient; +import com.azure.storage.blob.BlobServiceAsyncClient; import com.azure.storage.blob.BlobServiceClient; import com.azure.storage.blob.BlobServiceClientBuilder; import com.azure.storage.blob.models.BlobItem; @@ -94,14 +95,24 @@ public class AzureUtils { throw new AssertionError("do not instantiate"); } + public static BlobServiceClient buildAzureBlobClient(IApplicationContext appCtx, Map<String, String> configuration) + throws CompilationException { + return buildAzureBlobClient(BlobServiceClient.class, appCtx, configuration); + } + + public static BlobServiceAsyncClient buildAzureBlobAsyncClient(IApplicationContext appCtx, + Map<String, String> configuration) throws CompilationException { + return buildAzureBlobClient(BlobServiceAsyncClient.class, appCtx, configuration); + } + /** * Builds the Azure storage account using the provided configuration * * @param configuration properties * @return client */ - public static BlobServiceClient buildAzureBlobClient(IApplicationContext appCtx, Map<String, String> configuration) - throws CompilationException { + private static <T> T buildAzureBlobClient(Class<T> type, IApplicationContext appCtx, + Map<String, String> configuration) throws CompilationException { String managedIdentityId = configuration.get(MANAGED_IDENTITY_ID_FIELD_NAME); String accountName = configuration.get(ACCOUNT_NAME_FIELD_NAME); String accountKey = configuration.get(ACCOUNT_KEY_FIELD_NAME); @@ -247,7 +258,11 @@ public class AzureUtils { } try { - return builder.buildClient(); + if (type == BlobServiceClient.class) { + return type.cast(builder.buildClient()); + } else { + return type.cast(builder.buildAsyncClient()); + } } catch (Exception ex) { throw new CompilationException(ErrorCode.EXTERNAL_SOURCE_ERROR, ex, getMessageOrToString(ex)); }
