From 6ea8379d531e5430a54cd4edaf326ec37615a81d Mon Sep 17 00:00:00 2001 From: nidhiii-27 Date: Fri, 22 May 2026 11:35:25 +0530 Subject: [PATCH 1/4] fix(storage): fix flaky storage integration tests --- .../google/cloud/storage/BidiUploadStreamingStream.java | 7 +++++++ .../test/java/com/google/cloud/storage/BidiUploadTest.java | 5 +++++ .../storage/ITGapicUnbufferedWritableByteChannelTest.java | 7 +++---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/BidiUploadStreamingStream.java b/java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/BidiUploadStreamingStream.java index f6b9ae399e34..2ce2e8fd185b 100644 --- a/java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/BidiUploadStreamingStream.java +++ b/java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/BidiUploadStreamingStream.java @@ -165,6 +165,9 @@ public void flush() { public boolean finishWrite(long length) { lock.lock(); try { + if (state.getState() == State.TERMINAL_SUCCESS) { + return true; + } // if we're already finalizing, ack rather than enqueueing again if (state.isFinalizing() && state.getTotalSentBytes() == length) { return true; @@ -192,6 +195,10 @@ public boolean closeStream(long length) { lock.lock(); try { + if (state.getState() == State.TERMINAL_SUCCESS) { + return true; + } + boolean offer = state.finalFlush(length); if (offer) { internalSend(); diff --git a/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/BidiUploadTest.java b/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/BidiUploadTest.java index 2774981ecd62..725d8795c837 100644 --- a/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/BidiUploadTest.java +++ b/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/BidiUploadTest.java @@ -1356,6 +1356,11 @@ boolean isFinalizing() { return false; } + @Override + State getState() { + return State.RUNNING; + } + @Override long getTotalSentBytes() { return 0; diff --git a/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/ITGapicUnbufferedWritableByteChannelTest.java b/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/ITGapicUnbufferedWritableByteChannelTest.java index 3aa567a4d6a0..7730d672881f 100644 --- a/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/ITGapicUnbufferedWritableByteChannelTest.java +++ b/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/ITGapicUnbufferedWritableByteChannelTest.java @@ -380,12 +380,9 @@ static class DirectWriteService extends StorageImplBase { private static final Logger LOGGER = LoggerFactory.getLogger(DirectWriteService.class); private final BiConsumer, List> c; - private ImmutableList.Builder requests; - DirectWriteService( BiConsumer, List> c) { this.c = c; - this.requests = new ImmutableList.Builder<>(); } DirectWriteService(ImmutableMap, WriteObjectResponse> writes) { @@ -420,6 +417,9 @@ private static void logUnexpectedRequest( @Override public StreamObserver writeObject(StreamObserver obs) { return new Adapter() { + private final ImmutableList.Builder requests = + new ImmutableList.Builder<>(); + @Override public void onNext(WriteObjectRequest value) { requests.add(value); @@ -432,7 +432,6 @@ public void onError(Throwable t) {} public void onCompleted() { ImmutableList build = requests.build(); c.accept(obs, build); - requests = new ImmutableList.Builder<>(); } }; } From cef75cd70b159efe1e3824af7570b8e256daf490 Mon Sep 17 00:00:00 2001 From: nidhiii-27 Date: Fri, 22 May 2026 14:11:31 +0530 Subject: [PATCH 2/4] add terminal_error check --- .../com/google/cloud/storage/BidiUploadStreamingStream.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/BidiUploadStreamingStream.java b/java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/BidiUploadStreamingStream.java index 2ce2e8fd185b..89624f5f0fbf 100644 --- a/java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/BidiUploadStreamingStream.java +++ b/java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/BidiUploadStreamingStream.java @@ -165,7 +165,8 @@ public void flush() { public boolean finishWrite(long length) { lock.lock(); try { - if (state.getState() == State.TERMINAL_SUCCESS) { + State currentState = state.getState(); + if (currentState == State.TERMINAL_SUCCESS || currentState == State.TERMINAL_ERROR) { return true; } // if we're already finalizing, ack rather than enqueueing again @@ -195,7 +196,8 @@ public boolean closeStream(long length) { lock.lock(); try { - if (state.getState() == State.TERMINAL_SUCCESS) { + State currentState = state.getState(); + if (currentState == State.TERMINAL_SUCCESS || currentState == State.TERMINAL_ERROR) { return true; } From 44caa5f67b106c8a35031c1fdb5f964b563c6a41 Mon Sep 17 00:00:00 2001 From: nidhiii-27 Date: Fri, 22 May 2026 15:07:32 +0530 Subject: [PATCH 3/4] change worker-class in docker starting the testbench --- .../com/google/cloud/storage/it/runner/registry/TestBench.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/TestBench.java b/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/TestBench.java index 4d9340762093..1711094241db 100644 --- a/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/TestBench.java +++ b/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/TestBench.java @@ -262,7 +262,7 @@ public void start() { dockerImage, "gunicorn", "--bind=0.0.0.0:9000", - "--worker-class=sync", + "--worker-class=gevent", "--threads=10", "--access-logfile=-", "--keep-alive=0", From bd99c3df4297936c989c180fb95d62d2fd9f86ce Mon Sep 17 00:00:00 2001 From: nidhiii-27 Date: Fri, 22 May 2026 15:25:19 +0530 Subject: [PATCH 4/4] try changing the connection URI --- .../google/cloud/storage/it/runner/registry/TestBench.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/TestBench.java b/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/TestBench.java index 1711094241db..fca6975c6c43 100644 --- a/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/TestBench.java +++ b/java-storage/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/TestBench.java @@ -442,8 +442,8 @@ public String toString() { } static final class Builder { - private static final String DEFAULT_BASE_URI = "http://localhost:9000"; - private static final String DEFAULT_GRPC_BASE_URI = "http://localhost:9005"; + private static final String DEFAULT_BASE_URI = "http://127.0.0.1:9000"; + private static final String DEFAULT_GRPC_BASE_URI = "http://127.0.0.1:9005"; private static final String DEFAULT_IMAGE_NAME; private static final String DEFAULT_IMAGE_TAG;