Repository: hive Updated Branches: refs/heads/master ea87e0f26 -> f2dcdaa47
HIVE-14303: CommonJoinOperator.checkAndGenObject should return directly to avoid NPE if ExecReducer.close is called twice. (Zhihai Xu, reviewed by Chao Sun) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/f2dcdaa4 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/f2dcdaa4 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/f2dcdaa4 Branch: refs/heads/master Commit: f2dcdaa472ca238e481df549446a2613588ba28e Parents: ea87e0f Author: Zhihai Xu <zhihaixu2...@gmail.com> Authored: Tue Jan 17 10:52:39 2017 -0800 Committer: Chao Sun <sunc...@apache.org> Committed: Tue Jan 17 10:52:39 2017 -0800 ---------------------------------------------------------------------- .../apache/hadoop/hive/ql/exec/CommonJoinOperator.java | 10 ++++++++++ 1 file changed, 10 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/f2dcdaa4/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java index 940f2dd..7e9007c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java @@ -154,6 +154,8 @@ public abstract class CommonJoinOperator<T extends JoinDesc> extends protected transient int heartbeatInterval; protected static final int NOTSKIPBIGTABLE = -1; + private transient boolean closeOpCalled = false; + /** Kryo ctor. */ protected CommonJoinOperator() { super(); @@ -226,6 +228,7 @@ public abstract class CommonJoinOperator<T extends JoinDesc> extends @SuppressWarnings("unchecked") protected void initializeOp(Configuration hconf) throws HiveException { super.initializeOp(hconf); + closeOpCalled = false; this.handleSkewJoin = conf.getHandleSkewJoin(); this.hconf = hconf; @@ -851,6 +854,12 @@ public abstract class CommonJoinOperator<T extends JoinDesc> extends } protected void checkAndGenObject() throws HiveException { + if (closeOpCalled) { + LOG.warn("checkAndGenObject is called after operator " + + id + " " + getName() + " called closeOp"); + return; + } + if (condn[0].getType() == JoinDesc.UNIQUE_JOIN) { // Check if results need to be emitted. @@ -951,6 +960,7 @@ public abstract class CommonJoinOperator<T extends JoinDesc> extends */ @Override public void closeOp(boolean abort) throws HiveException { + closeOpCalled = true; for (AbstractRowContainer<List<Object>> alw : storage) { if (alw != null) { alw.clearRows(); // clean up the temp files