From 4b6ba84315009ebc834b3f2b48a2f3e57c38e1ab Mon Sep 17 00:00:00 2001 From: Isabelle Date: Tue, 23 Jun 2026 12:46:38 -0700 Subject: [PATCH 1/3] Make synchronous stageBlock request body replayable on retry --- .../storage/blob/specialized/BlockBlobClient.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/specialized/BlockBlobClient.java b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/specialized/BlockBlobClient.java index a9a68ada5e71..2ab1287cbe63 100644 --- a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/specialized/BlockBlobClient.java +++ b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/specialized/BlockBlobClient.java @@ -38,14 +38,17 @@ import com.azure.storage.blob.options.BlockBlobSimpleUploadOptions; import com.azure.storage.blob.options.BlockBlobStageBlockFromUrlOptions; import com.azure.storage.blob.options.BlockBlobStageBlockOptions; +import com.azure.storage.common.Utility; import com.azure.storage.common.implementation.Constants; import com.azure.storage.common.implementation.StorageImplUtils; import com.azure.storage.common.implementation.StorageSeekableByteChannel; +import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.io.InputStream; import java.io.UncheckedIOException; import java.net.URL; +import java.nio.ByteBuffer; import java.nio.channels.SeekableByteChannel; import java.time.Duration; import java.util.List; @@ -783,10 +786,13 @@ public Response stageBlockWithResponse(String base64BlockId, InputStream d String leaseId, Duration timeout, Context context) { StorageImplUtils.assertNotNull("data", data); - Mono> response = client.stageBlockWithResponseInternal( - new BlockBlobStageBlockOptions(base64BlockId, BinaryData.fromStream(data, length)).setContentMd5(contentMd5) - .setLeaseId(leaseId), - context); + Flux fbb + = Utility.convertStreamToByteBuffer(data, length, BlobAsyncClient.BLOB_DEFAULT_UPLOAD_BLOCK_SIZE, true); + + Mono> response = BinaryData.fromFlux(fbb, length, false) + .flatMap(binaryData -> client.stageBlockWithResponseInternal( + new BlockBlobStageBlockOptions(base64BlockId, binaryData).setContentMd5(contentMd5).setLeaseId(leaseId), + context)); return blockWithOptionalTimeout(response, timeout); } From a2de01d31a3d2c44293eabfb25e8d46f4917c6c7 Mon Sep 17 00:00:00 2001 From: Isabelle Date: Tue, 23 Jun 2026 13:00:08 -0700 Subject: [PATCH 2/3] updating assets (unrelated to the changes in this PR) --- sdk/storage/azure-storage-blob/assets.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/storage/azure-storage-blob/assets.json b/sdk/storage/azure-storage-blob/assets.json index 85028bbf87f6..5a8e5c607946 100644 --- a/sdk/storage/azure-storage-blob/assets.json +++ b/sdk/storage/azure-storage-blob/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "java", "TagPrefix": "java/storage/azure-storage-blob", - "Tag": "java/storage/azure-storage-blob_afc0d343f3" + "Tag": "java/storage/azure-storage-blob_78334e439c" } From dfe50ebe84711b6b14f8fcaf1117ddfe5fa71c9d Mon Sep 17 00:00:00 2001 From: Isabelle Date: Tue, 23 Jun 2026 13:50:10 -0700 Subject: [PATCH 3/3] updating recordings --- sdk/storage/azure-storage-blob/assets.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/storage/azure-storage-blob/assets.json b/sdk/storage/azure-storage-blob/assets.json index 5a8e5c607946..769ef2797967 100644 --- a/sdk/storage/azure-storage-blob/assets.json +++ b/sdk/storage/azure-storage-blob/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "java", "TagPrefix": "java/storage/azure-storage-blob", - "Tag": "java/storage/azure-storage-blob_78334e439c" + "Tag": "java/storage/azure-storage-blob_494b72fca7" }