From 2a03e8c25f151053d269e63b2e5644dfb4287afc Mon Sep 17 00:00:00 2001 From: Jesse Lovelace Date: Wed, 27 Dec 2023 16:22:53 -0800 Subject: [PATCH 1/2] fix: Add an exception to zero byte uploads on CreateFrom --- .../com/google/cloud/storage/StorageImpl.java | 5 ++++- .../google/cloud/storage/it/ITObjectTest.java | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java index 2cf693e83f..94b3387768 100644 --- a/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java +++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java @@ -230,6 +230,10 @@ public Blob createFrom(BlobInfo blobInfo, Path path, int bufferSize, BlobWriteOp if (Files.isDirectory(path)) { throw new StorageException(0, path + " is a directory"); } + long size = Files.size(path); + if (size == 0L) { + return create(blobInfo, null, options); + } Opts opts = Opts.unwrap(options).resolveFrom(blobInfo); final Map optionsMap = opts.getRpcOptions(); BlobInfo.Builder builder = blobInfo.toBuilder().setMd5(null).setCrc32c(null); @@ -251,7 +255,6 @@ public Blob createFrom(BlobInfo blobInfo, Path path, int bufferSize, BlobWriteOp getOptions().asRetryDependencies(), retryAlgorithmManager.idempotent(), jsonResumableWrite); - long size = Files.size(path); HttpContentRange contentRange = HttpContentRange.of(ByteRangeSpec.relativeLength(0L, size), size); ResumableOperationResult put = diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITObjectTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITObjectTest.java index e6f0607d7e..d288eca8d4 100644 --- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITObjectTest.java +++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITObjectTest.java @@ -54,6 +54,7 @@ import com.google.cloud.storage.Storage.PredefinedAcl; import com.google.cloud.storage.StorageClass; import com.google.cloud.storage.StorageException; +import com.google.cloud.storage.StorageOptions; import com.google.cloud.storage.TransportCompatibility.Transport; import com.google.cloud.storage.it.runner.StorageITRunner; import com.google.cloud.storage.it.runner.annotations.Backend; @@ -74,10 +75,12 @@ import com.google.common.primitives.Ints; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.channels.Channels; +import java.nio.file.Paths; import java.security.Key; import java.util.Arrays; import java.util.HashMap; @@ -197,6 +200,21 @@ public void testCreateEmptyBlob() { assertArrayEquals(new byte[0], readBytes); } + @Test + public void testZeroByteFileUpload() throws Exception { + String blobName = generator.randomObjectName(); + BlobId blobId = BlobId.of(bucket.getName(), blobName); + BlobInfo blobInfo = BlobInfo.newBuilder(blobId).build(); + + File zeroByteFile = File.createTempFile("zerobyte", null); + zeroByteFile.deleteOnExit(); + + storage.createFrom(blobInfo, Paths.get(zeroByteFile.getAbsolutePath())); + + byte[] readBytes = storage.readAllBytes(bucket.getName(), blobName); + assertArrayEquals(new byte[0], readBytes); + } + @Test @SuppressWarnings({"unchecked", "deprecation"}) public void testCreateBlobStream() { From 7fd2f0009e7cbcbadaaeaa68360f2fca48f9071f Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Thu, 28 Dec 2023 00:29:10 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot=20po?= =?UTF-8?q?st-processor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- .../src/test/java/com/google/cloud/storage/it/ITObjectTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITObjectTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITObjectTest.java index d288eca8d4..99ed548098 100644 --- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITObjectTest.java +++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITObjectTest.java @@ -54,7 +54,6 @@ import com.google.cloud.storage.Storage.PredefinedAcl; import com.google.cloud.storage.StorageClass; import com.google.cloud.storage.StorageException; -import com.google.cloud.storage.StorageOptions; import com.google.cloud.storage.TransportCompatibility.Transport; import com.google.cloud.storage.it.runner.StorageITRunner; import com.google.cloud.storage.it.runner.annotations.Backend;