Skip to content

Commit e2a3e3c

Browse files
committed
chore: ensure appendable finalize after close works
1 parent bee4308 commit e2a3e3c

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

google-cloud-storage/src/main/java/com/google/cloud/storage/GapicBidiUnbufferedAppendableWriteableByteChannel.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ public void close() throws IOException {
147147
}
148148

149149
public void finalizeWrite() throws IOException {
150+
if (stream == null) {
151+
restart();
152+
}
150153
BidiWriteObjectRequest message = finishMessage();
151154
lastWrittenRequest = message;
152155
begin = writeCtx.getConfirmedBytes().get();

google-cloud-storage/src/test/java/com/google/cloud/storage/ITAppendableUploadTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import static com.google.cloud.storage.ByteSizeConstants._2MiB;
1919
import static com.google.common.truth.Truth.assertThat;
2020

21+
import com.google.cloud.storage.Storage.BlobField;
22+
import com.google.cloud.storage.Storage.BlobGetOption;
2123
import com.google.cloud.storage.it.runner.StorageITRunner;
2224
import com.google.cloud.storage.it.runner.annotations.Backend;
2325
import com.google.cloud.storage.it.runner.annotations.Inject;
@@ -119,4 +121,36 @@ public void testUploadFileUsingAppendable() throws Exception {
119121
}
120122
}
121123
}
124+
125+
@Test
126+
public void finalizeAfterCloseWorks() throws Exception {
127+
BlobId bid = BlobId.of(bucket.getName(), generator.randomObjectName());
128+
129+
AppendableBlobUpload appendable =
130+
storage.appendableBlobUpload(BlobInfo.newBuilder(bid).build(), 1024);
131+
appendable.write(DataGenerator.base64Characters().genByteBuffer(3587));
132+
133+
appendable.close();
134+
BlobInfo bi = appendable.finalizeUpload();
135+
assertThat(bi.getSize()).isEqualTo(3587);
136+
}
137+
138+
@Test
139+
public void takeoverJustToFinalizeWorks() throws Exception {
140+
BlobId bid = BlobId.of(bucket.getName(), generator.randomObjectName());
141+
142+
AppendableBlobUpload upload = storage.appendableBlobUpload(BlobInfo.newBuilder(bid).build(), 5);
143+
144+
upload.write(DataGenerator.base64Characters().genByteBuffer(20));
145+
upload.close();
146+
147+
Blob blob =
148+
storage.get(
149+
bid, BlobGetOption.fields(BlobField.BUCKET, BlobField.NAME, BlobField.GENERATION));
150+
151+
AppendableBlobUpload takeOver =
152+
storage.appendableBlobUpload(BlobInfo.newBuilder(blob.getBlobId()).build(), 5);
153+
BlobInfo i = takeOver.finalizeUpload();
154+
assertThat(i.getSize()).isEqualTo(20);
155+
}
122156
}

0 commit comments

Comments
 (0)