This is an automated email from the ASF dual-hosted git repository.
technoboy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new c83cafc12eb [fix][offload] Close all resources in
BlobStoreBackedReadHandleImplV2.closeAsync (#25296)
c83cafc12eb is described below
commit c83cafc12eb1db4c3f17c4f0e47ebb3b8403fe56
Author: Sanjay Malakar <[email protected]>
AuthorDate: Mon Mar 9 19:37:33 2026 -0700
[fix][offload] Close all resources in
BlobStoreBackedReadHandleImplV2.closeAsync (#25296)
---
.../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);
}
});