Luo Chen has submitted this change and it was merged. Change subject: [NO ISSUE][STO] Improve error handling of writing deleted file ......................................................................
[NO ISSUE][STO] Improve error handling of writing deleted file - user model changes: no - storage format changes: no - interface changes: no Details: - When the bulkloader is aborted, the file would be deleted from the buffer cache but there could still be unflushed pages in the write queue. Instead of throwing exceptions, simply ignore the case when writting to non-existing files (as before). Change-Id: I3f693ef178e0ab68c2a28b0edc6ffeaaeca1c520 Reviewed-on: https://asterix-gerrit.ics.uci.edu/2651 Sonar-Qube: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Contrib: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> Reviewed-by: Ian Maxon <[email protected]> --- M hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java M hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/FIFOLocalWriter.java M hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/BufferedFileHandle.java 3 files changed, 21 insertions(+), 6 deletions(-) Approvals: Anon. E. Moose #1000171: Jenkins: Verified; No violations found; ; Verified Ian Maxon: Looks good to me, approved diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java index 55ed75e..f8facf5 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java @@ -588,7 +588,7 @@ fInfo = fileInfoMap.get(fileId); } if (fInfo == null) { - throw new HyracksDataException("No such file mapped"); + throw HyracksDataException.create(ErrorCode.FILE_DOES_NOT_EXIST, fileId); } return fInfo; } @@ -607,11 +607,11 @@ void write(CachedPage cPage) throws HyracksDataException { BufferedFileHandle fInfo = getFileInfo(cPage); - if (fInfo == null) { - throw new IllegalStateException("Attempting to write non-existing file"); - } // synchronize on fInfo to prevent the file handle from being deleted until the page is written. synchronized (fInfo) { + if (fInfo.fileHasBeenDeleted()) { + return; + } ByteBuffer buf = cPage.buffer.duplicate(); final int totalPages = cPage.getFrameSizeMultiplier(); final int extraBlockPageId = cPage.getExtraBlockPageId(); @@ -1032,13 +1032,15 @@ } } finally { try { - ioManager.close(fInfo.getFileHandle()); + synchronized (fInfo) { + ioManager.close(fInfo.getFileHandle()); + fInfo.markAsDeleted(); + } } finally { IoUtil.delete(fileRef); } } } - } @Override diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/FIFOLocalWriter.java b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/FIFOLocalWriter.java index 9d0b728..856edbc 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/FIFOLocalWriter.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/FIFOLocalWriter.java @@ -15,6 +15,7 @@ package org.apache.hyracks.storage.common.buffercache; +import org.apache.hyracks.api.exceptions.ErrorCode; import org.apache.hyracks.api.exceptions.HyracksDataException; public class FIFOLocalWriter implements IFIFOPageWriter { @@ -29,6 +30,10 @@ CachedPage cPage = (CachedPage) page; try { bufferCache.write(cPage); + } catch (HyracksDataException e) { + if (e.getErrorCode() != ErrorCode.FILE_DOES_NOT_EXIST) { + throw HyracksDataException.create(e); + } } finally { bufferCache.returnPage(cPage); if (DEBUG) { diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/BufferedFileHandle.java b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/BufferedFileHandle.java index 62e7888..1312d97 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/BufferedFileHandle.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/BufferedFileHandle.java @@ -45,6 +45,14 @@ return handle; } + public void markAsDeleted() { + handle = null; + } + + public boolean fileHasBeenDeleted() { + return handle == null; + } + public int incReferenceCount() { return refCount.incrementAndGet(); } -- To view, visit https://asterix-gerrit.ics.uci.edu/2651 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: I3f693ef178e0ab68c2a28b0edc6ffeaaeca1c520 Gerrit-PatchSet: 2 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Luo Chen <[email protected]> Gerrit-Reviewer: Anon. E. Moose #1000171 Gerrit-Reviewer: Ian Maxon <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Luo Chen <[email protected]> Gerrit-Reviewer: abdullah alamoudi <[email protected]>
