From 3b1ee2454a1577c81afcb896cde932a51ef2dffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Wa=C5=9B?= Date: Mon, 29 Jul 2024 15:53:51 +0200 Subject: [PATCH] Make createOrOverwrite atomic for Azure FS Before this change, if an exception happens after opening the stream in `createOrOverwrite`, the stream will be properly closed, leaving behind an empty or partially written file. --- .../java/io/trino/filesystem/azure/AzureOutputFile.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/trino-filesystem-azure/src/main/java/io/trino/filesystem/azure/AzureOutputFile.java b/lib/trino-filesystem-azure/src/main/java/io/trino/filesystem/azure/AzureOutputFile.java index 19e4a1522a3d..5d9d242112d2 100644 --- a/lib/trino-filesystem-azure/src/main/java/io/trino/filesystem/azure/AzureOutputFile.java +++ b/lib/trino-filesystem-azure/src/main/java/io/trino/filesystem/azure/AzureOutputFile.java @@ -13,6 +13,7 @@ */ package io.trino.filesystem.azure; +import com.azure.core.util.BinaryData; import com.azure.storage.blob.BlobClient; import io.trino.filesystem.Location; import io.trino.filesystem.TrinoOutputFile; @@ -23,7 +24,6 @@ import java.nio.file.FileAlreadyExistsException; import static com.google.common.base.Preconditions.checkArgument; -import static io.trino.memory.context.AggregatedMemoryContext.newSimpleAggregatedMemoryContext; import static java.util.Objects.requireNonNull; class AzureOutputFile @@ -69,9 +69,7 @@ public OutputStream create(AggregatedMemoryContext memoryContext) public void createOrOverwrite(byte[] data) throws IOException { - try (OutputStream out = createOutputStream(newSimpleAggregatedMemoryContext(), true)) { - out.write(data); - } + blobClient.getBlockBlobClient().upload(BinaryData.fromBytes(data), true); } @Override