diff --git ql/src/java/org/apache/hadoop/hive/ql/Driver.java ql/src/java/org/apache/hadoop/hive/ql/Driver.java index f690b87..3ae695e 100644 --- ql/src/java/org/apache/hadoop/hive/ql/Driver.java +++ ql/src/java/org/apache/hadoop/hive/ql/Driver.java @@ -1507,6 +1507,11 @@ public int execute() throws CommandNeedRetryException { } } } + + if (driverCxt.getCurJobNo() < jobs) { + throw new HiveException("Query incorrectly finished without finishing all tasks"); + } + 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 e584e6e..5e30897 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; @@ -349,6 +349,7 @@ public boolean isRunnable() { if (parentTasks != null) { for (Task parent : parentTasks) { if (!parent.done()) { + LOG.info("Task " + this + " cannot run because parent " + parent + " isn't done."); isrunnable = false; break; }