[ASTERIXDB-3591][RT] Ensure all search cursors closed
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
Ensure all search cursors closed to make sure cloud streams
are closed.
Ext-ref: MB-66048
Change-Id: Id044489573e5ef50b5bae4b7ba8fa36cd10cbfcf
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19632
Reviewed-by: Ritik Raj <ritik.raj@couchbase.com>
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java
index 9740bc4..9dd8611 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree/src/main/java/org/apache/hyracks/storage/am/lsm/btree/impls/LSMBTreePointSearchCursor.java
@@ -31,6 +31,7 @@
import org.apache.hyracks.storage.am.common.api.ILSMIndexCursor;
import org.apache.hyracks.storage.am.common.api.ITreeIndexCursor;
import org.apache.hyracks.storage.am.common.impls.NoOpIndexAccessParameters;
+import org.apache.hyracks.storage.am.common.util.ResourceReleaseUtils;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent.LSMComponentType;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilter;
@@ -288,11 +289,15 @@
protected void closeCursors() throws HyracksDataException {
if (btreeCursors != null) {
+ Throwable failure = null;
for (int i = 0; i < numBTrees; ++i) {
if (btreeCursors[i] != null) {
- btreeCursors[i].close();
+ failure = ResourceReleaseUtils.close(btreeCursors[i], failure);
}
}
+ if (failure != null) {
+ throw HyracksDataException.create(failure);
+ }
}
}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMIndexSearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMIndexSearchCursor.java
index 2c97221..d53e686 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMIndexSearchCursor.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMIndexSearchCursor.java
@@ -28,6 +28,7 @@
import org.apache.hyracks.dataflow.common.data.accessors.ITupleReference;
import org.apache.hyracks.storage.am.common.api.ILSMIndexCursor;
import org.apache.hyracks.storage.am.common.impls.IndexAccessParameters;
+import org.apache.hyracks.storage.am.common.util.ResourceReleaseUtils;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponent;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMComponentFilter;
import org.apache.hyracks.storage.am.lsm.common.api.ILSMHarness;
@@ -127,8 +128,12 @@
}
if (rangeCursors != null) {
+ Throwable failure = null;
for (int i = 0; i < rangeCursors.length; i++) {
- rangeCursors[i].close();
+ failure = ResourceReleaseUtils.close(rangeCursors[i], failure);
+ }
+ if (failure != null) {
+ throw HyracksDataException.create(failure);
}
}
} finally {