Repository: asterixdb Updated Branches: refs/heads/master 1308eae51 -> 54384a377
[ASTERIXDB-1961][IDX] Prevent NPE in cursor during cancellation - user model changes: no - interface changes: no - storage format changes: no Details: - Prevent NPE in cursor when an interruption happens during cursors initialization. - Keep track of interruption stack trace to help in diagnosing future similar issues. Change-Id: I6937d14bc79d6583bb62c1d7b726ab0f26a59d79 Reviewed-on: https://asterix-gerrit.ics.uci.edu/1856 Reviewed-by: abdullah alamoudi <[email protected]> Tested-by: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> BAD: Jenkins <[email protected]> Reviewed-by: Yingyi Bu <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/54384a37 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/54384a37 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/54384a37 Branch: refs/heads/master Commit: 54384a377e3870310a462758ddda3d6f799972b7 Parents: 1308eae Author: Murtadha Hubail <[email protected]> Authored: Wed Jun 28 17:26:03 2017 +0300 Committer: Murtadha Hubail <[email protected]> Committed: Wed Jun 28 08:54:59 2017 -0700 ---------------------------------------------------------------------- .../java/org/apache/hyracks/control/nc/Task.java | 17 ++++++++++++++++- .../am/lsm/common/impls/LSMIndexSearchCursor.java | 10 +++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/54384a37/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java index d689bc0..ad4881a 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java @@ -280,6 +280,7 @@ public class Task implements IHyracksTaskContext, ICounterContext, Runnable { } ct.setName(displayName + ":" + taskAttemptId + ":" + 0); try { + Exception operatorException = null; try { operator.initialize(); if (collectors.length > 0) { @@ -318,8 +319,22 @@ public class Task implements IHyracksTaskContext, ICounterContext, Runnable { sem.acquire(collectors.length - 1); } } + } catch (Exception e) { + // Store the operator exception + operatorException = e; + throw e; } finally { - operator.deinitialize(); + try { + operator.deinitialize(); + } catch (Exception e) { + if (operatorException != null) { + // Add deinitialize exception to the operator exception to keep track of both + operatorException.addSuppressed(e); + } else { + operatorException = e; + } + throw operatorException; + } } NodeControllerService ncs = joblet.getNodeController(); ncs.getWorkQueue().schedule(new NotifyTaskCompleteWork(ncs, this)); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/54384a37/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/LSMIndexSearchCursor.java ---------------------------------------------------------------------- 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 f99a859..724a909 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 @@ -137,10 +137,14 @@ public abstract class LSMIndexSearchCursor implements ITreeIndexCursor { if (outputPriorityQueue != null) { outputPriorityQueue.clear(); } - for (int i = 0; i < rangeCursors.length; i++) { - rangeCursors[i].close(); + if (rangeCursors != null) { + for (int i = 0; i < rangeCursors.length; i++) { + if (rangeCursors[i] != null) { + rangeCursors[i].close(); + } + } + rangeCursors = null; } - rangeCursors = null; } finally { if (lsmHarness != null) { lsmHarness.endSearch(opCtx);
