diff --git ql/src/java/org/apache/hadoop/hive/ql/Driver.java ql/src/java/org/apache/hadoop/hive/ql/Driver.java index 5b36f71..07d4033 100644 --- ql/src/java/org/apache/hadoop/hive/ql/Driver.java +++ ql/src/java/org/apache/hadoop/hive/ql/Driver.java @@ -1436,6 +1436,12 @@ public int execute() throws CommandNeedRetryException { } } } + + if (driverCxt.getCurJobNo() < jobs) { + throw new HiveException("Query incorrectly finished without finishing all tasks (" + + driverCxt.getCurJobNo() + " out of " + jobs + ")"); + } + perfLogger.PerfLogEnd(CLASS_NAME, PerfLogger.RUN_TASKS); // in case we decided to run everything in local mode, restore the diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java index 2a55527..409f535 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java @@ -57,7 +57,7 @@ public transient TaskHandle taskHandle; protected transient boolean started; protected transient boolean initialized; - protected transient boolean isdone; + protected transient volatile boolean isdone; protected transient boolean queued; protected transient HiveConf conf; protected transient Hive db; @@ -348,6 +348,7 @@ public boolean isRunnable() { if (parentTasks != null) { for (Task parent : parentTasks) { if (!parent.done()) { + LOG.debug("Task " + this + " cannot run because parent " + parent + " isn't done."); isrunnable = false; break; }