This is an automated email from the ASF dual-hosted git repository.

lhotari pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit e190cb50446a40221f49d4414133bc85df8c563e
Author: Sanjay Malakar <[email protected]>
AuthorDate: Mon Mar 9 19:37:33 2026 -0700

    [fix][offload] Close all resources in 
BlobStoreBackedReadHandleImplV2.closeAsync (#25296)
    
    (cherry picked from commit c83cafc12eb1db4c3f17c4f0e47ebb3b8403fe56)
---
 .../impl/BlobStoreBackedReadHandleImplV2.java      | 30 +++++++++++++++++++---
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git 
a/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlobStoreBackedReadHandleImplV2.java
 
b/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlobStoreBackedReadHandleImplV2.java
index 3fffd18a5d8..1ac5047ba71 100644
--- 
a/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlobStoreBackedReadHandleImplV2.java
+++ 
b/tiered-storage/jcloud/src/main/java/org/apache/bookkeeper/mledger/offload/jcloud/impl/BlobStoreBackedReadHandleImplV2.java
@@ -133,15 +133,37 @@ public class BlobStoreBackedReadHandleImplV2 implements 
ReadHandle {
         CompletableFuture<Void> promise = closeFuture.get();
         executor.execute(() -> {
             try {
+                IOException first = null;
                 for (OffloadIndexBlockV2 indexBlock : indices) {
-                    indexBlock.close();
+                    try {
+                        indexBlock.close();
+                    } catch (IOException e) {
+                        if (first == null) {
+                            first = e;
+                        } else {
+                            first.addSuppressed(e);
+                        }
+                    }
                 }
                 for (DataInputStream dataStream : dataStreams) {
-                    dataStream.close();
+                    try {
+                        dataStream.close();
+                    } catch (IOException e) {
+                        if (first == null) {
+                            first = e;
+                        } else {
+                            first.addSuppressed(e);
+                        }
+                    }
+                }
+                state = State.Closed;
+                if (first != null) {
+                    promise.completeExceptionally(first);
+                } else {
+                    promise.complete(null);
                 }
+            } catch (Throwable t) {
                 state = State.Closed;
-                promise.complete(null);
-            } catch (IOException t) {
                 promise.completeExceptionally(t);
             }
         });

Reply via email to