This is an automated email from the ASF dual-hosted git repository. imaxon pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit d467bc17fdcd35efeae360ced3a56946d19db74b Author: Murtadha Hubail <[email protected]> AuthorDate: Fri Sep 26 19:23:00 2025 +0300 [NO ISSUE][STO] Ensure handle is reset on SweepContext close - user model changes: no - storage format changes: no - interface changes: yes Details: - In case of any exception during SweepContext close, ensure that the file handle is reset since this context is reused on all indexes. Such failures during close can happen if a file is deleted while after the handle has been initialized. - Fix the dropped index flag in SweepableIndexUnit. Ext-ref: MB-68731 Change-Id: I40629f07b6483240c6c51734cf33888565092fcb Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20416 Tested-by: Ian Maxon <[email protected]> Integration-Tests: Ian Maxon <[email protected]> Reviewed-by: Ritik Raj <[email protected]> Reviewed-by: Murtadha Hubail <[email protected]> --- .../hyracks/cloud/cache/unit/SweepableIndexUnit.java | 2 +- .../org/apache/hyracks/cloud/sweeper/SweepContext.java | 14 +++++++++++--- .../apache/hyracks/storage/common/disk/ISweepContext.java | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/cache/unit/SweepableIndexUnit.java b/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/cache/unit/SweepableIndexUnit.java index 794cafc6ff..5a96105807 100644 --- a/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/cache/unit/SweepableIndexUnit.java +++ b/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/cache/unit/SweepableIndexUnit.java @@ -39,7 +39,7 @@ public final class SweepableIndexUnit extends AbstractIndexUnit { @Override public void drop() { // Signal that the index is being dropped so a sweeper thread does not sweep this index or stops sweeping - dropped.set(false); + dropped.set(true); // Wait for the sweep operation (if running) before allowing the index to be dropped waitForSweep(); } diff --git a/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/sweeper/SweepContext.java b/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/sweeper/SweepContext.java index 86cac57dbf..e934e15a54 100644 --- a/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/sweeper/SweepContext.java +++ b/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/sweeper/SweepContext.java @@ -30,8 +30,11 @@ import org.apache.hyracks.storage.common.buffercache.ICachedPage; import org.apache.hyracks.storage.common.buffercache.context.IBufferCacheReadContext; import org.apache.hyracks.storage.common.disk.ISweepContext; import org.apache.hyracks.storage.common.file.BufferedFileHandle; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public final class SweepContext implements ISweepContext { + private static final Logger LOGGER = LogManager.getLogger(); private final ICloudIOManager cloudIOManager; private final BufferCache bufferCache; private final Map<Integer, BufferedFileHandle> fileInfoMap; @@ -57,10 +60,15 @@ public final class SweepContext implements ISweepContext { } @Override - public void close() throws HyracksDataException { + public void close() { if (handle != null) { - bufferCache.closeFile(handle.getFileId()); - handle = null; + try { + bufferCache.closeFile(handle.getFileId()); + } catch (Exception e) { + LOGGER.warn("failed to close file {}", handle.getFileId(), e); + } finally { + handle = null; + } } } diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/disk/ISweepContext.java b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/disk/ISweepContext.java index c1204f5441..57397831c7 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/disk/ISweepContext.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/disk/ISweepContext.java @@ -38,7 +38,7 @@ public interface ISweepContext { /** * Close the opened file */ - void close() throws HyracksDataException; + void close(); /** * Pin a page
