From d97e4995cd1f44ce9bbf684675ae824377c3abc0 Mon Sep 17 00:00:00 2001 From: Yavor16 Date: Thu, 19 Mar 2026 13:39:53 +0200 Subject: [PATCH 1/2] Try to fix --- .../services/AzureObjectStoreFileStorage.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/multiapps-controller-persistence/src/main/java/org/cloudfoundry/multiapps/controller/persistence/services/AzureObjectStoreFileStorage.java b/multiapps-controller-persistence/src/main/java/org/cloudfoundry/multiapps/controller/persistence/services/AzureObjectStoreFileStorage.java index e3da858584..1b81b6bf0f 100644 --- a/multiapps-controller-persistence/src/main/java/org/cloudfoundry/multiapps/controller/persistence/services/AzureObjectStoreFileStorage.java +++ b/multiapps-controller-persistence/src/main/java/org/cloudfoundry/multiapps/controller/persistence/services/AzureObjectStoreFileStorage.java @@ -4,6 +4,7 @@ import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; +import java.time.Duration; import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -24,6 +25,7 @@ import com.azure.storage.blob.models.BlobRange; import com.azure.storage.blob.models.BlobStorageException; import com.azure.storage.blob.models.ListBlobsOptions; +import com.azure.storage.blob.models.ParallelTransferOptions; import com.azure.storage.blob.options.BlobParallelUploadOptions; import org.cloudfoundry.multiapps.controller.persistence.Messages; import org.cloudfoundry.multiapps.controller.persistence.model.FileEntry; @@ -41,17 +43,29 @@ public class AzureObjectStoreFileStorage implements FileStorage { public AzureObjectStoreFileStorage(Map credentials) { this.containerClient = createContainerClient(credentials); - this.httpClient = new OkHttpAsyncHttpClientBuilder().build(); + this.httpClient = new OkHttpAsyncHttpClientBuilder() + // this.httpClient = new OkHttpAsyncHttpClientBuilder().connectionTimeout(Duration.ofSeconds(30)) + // .readTimeout(ObjectStoreConstants.OBJECT_STORE_TOTAL_TIMEOUT_CONFIG_IN_MINUTES) + // .writeTimeout(ObjectStoreConstants.OBJECT_STORE_TOTAL_TIMEOUT_CONFIG_IN_MINUTES) + // .responseTimeout( + // ObjectStoreConstants.OBJECT_STORE_TOTAL_TIMEOUT_CONFIG_IN_MINUTES) + // .callTimeout(ObjectStoreConstants.OBJECT_STORE_TOTAL_TIMEOUT_CONFIG_IN_MINUTES) + .build(); } @Override public void addFile(FileEntry fileEntry, InputStream content) throws FileStorageException { BlobClient blobClient = containerClient.getBlobClient(fileEntry.getId()); try { + ParallelTransferOptions pto = new ParallelTransferOptions().setBlockSizeLong(50L * 1024 * 1024) + .setMaxConcurrency(25) + .setMaxSingleUploadSizeLong(50L * 1024 * 1024); + BlobParallelUploadOptions blobParallelUploadOptions = new BlobParallelUploadOptions(content); + blobParallelUploadOptions.setParallelTransferOptions(pto); blobParallelUploadOptions.setMetadata(ObjectStoreMapper.createFileEntryMetadata(fileEntry)); - blobClient.uploadWithResponse(blobParallelUploadOptions, ObjectStoreConstants.OBJECT_STORE_TOTAL_TIMEOUT_CONFIG_IN_MINUTES, + blobClient.uploadWithResponse(blobParallelUploadOptions, Duration.ofMinutes(40), null); } catch (BlobStorageException e) { throw new FileStorageException(e); From 1f8328dd3c05f4776c3669b71dae1cf8482b3679 Mon Sep 17 00:00:00 2001 From: Yavor16 Date: Thu, 26 Mar 2026 09:29:34 +0200 Subject: [PATCH 2/2] New change --- .../services/AzureObjectStoreFileStorage.java | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/multiapps-controller-persistence/src/main/java/org/cloudfoundry/multiapps/controller/persistence/services/AzureObjectStoreFileStorage.java b/multiapps-controller-persistence/src/main/java/org/cloudfoundry/multiapps/controller/persistence/services/AzureObjectStoreFileStorage.java index 1b81b6bf0f..d4f3a5531c 100644 --- a/multiapps-controller-persistence/src/main/java/org/cloudfoundry/multiapps/controller/persistence/services/AzureObjectStoreFileStorage.java +++ b/multiapps-controller-persistence/src/main/java/org/cloudfoundry/multiapps/controller/persistence/services/AzureObjectStoreFileStorage.java @@ -4,7 +4,6 @@ import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; -import java.time.Duration; import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -38,34 +37,30 @@ public class AzureObjectStoreFileStorage implements FileStorage { private static final String SAS_TOKEN = "sas_token"; private static final String CONTAINER_NAME = "container_name"; private static final String CONTAINER_URI = "container_uri"; + private static final long MAX_SINGLE_UPLOAD_SIZE = 50L * 1024 * 1024; // 50MB + private static final long BLOCK_SIZE = 50L * 1024 * 1024; // 50MB + private static final int MAX_CONCURRENCY = 25; private final HttpClient httpClient; private final BlobContainerClient containerClient; public AzureObjectStoreFileStorage(Map credentials) { this.containerClient = createContainerClient(credentials); - this.httpClient = new OkHttpAsyncHttpClientBuilder() - // this.httpClient = new OkHttpAsyncHttpClientBuilder().connectionTimeout(Duration.ofSeconds(30)) - // .readTimeout(ObjectStoreConstants.OBJECT_STORE_TOTAL_TIMEOUT_CONFIG_IN_MINUTES) - // .writeTimeout(ObjectStoreConstants.OBJECT_STORE_TOTAL_TIMEOUT_CONFIG_IN_MINUTES) - // .responseTimeout( - // ObjectStoreConstants.OBJECT_STORE_TOTAL_TIMEOUT_CONFIG_IN_MINUTES) - // .callTimeout(ObjectStoreConstants.OBJECT_STORE_TOTAL_TIMEOUT_CONFIG_IN_MINUTES) - .build(); + this.httpClient = new OkHttpAsyncHttpClientBuilder().build(); } @Override public void addFile(FileEntry fileEntry, InputStream content) throws FileStorageException { BlobClient blobClient = containerClient.getBlobClient(fileEntry.getId()); try { - ParallelTransferOptions pto = new ParallelTransferOptions().setBlockSizeLong(50L * 1024 * 1024) - .setMaxConcurrency(25) - .setMaxSingleUploadSizeLong(50L * 1024 * 1024); + ParallelTransferOptions pto = new ParallelTransferOptions().setMaxSingleUploadSizeLong(MAX_SINGLE_UPLOAD_SIZE) + .setMaxConcurrency(MAX_CONCURRENCY) + .setBlockSizeLong(BLOCK_SIZE); BlobParallelUploadOptions blobParallelUploadOptions = new BlobParallelUploadOptions(content); blobParallelUploadOptions.setParallelTransferOptions(pto); blobParallelUploadOptions.setMetadata(ObjectStoreMapper.createFileEntryMetadata(fileEntry)); - blobClient.uploadWithResponse(blobParallelUploadOptions, Duration.ofMinutes(40), + blobClient.uploadWithResponse(blobParallelUploadOptions, ObjectStoreConstants.OBJECT_STORE_TOTAL_TIMEOUT_CONFIG_IN_MINUTES, null); } catch (BlobStorageException e) { throw new FileStorageException(e);