diff --git a/ql/src/java/org/apache/hadoop/hive/ql/DriverContext.java b/ql/src/java/org/apache/hadoop/hive/ql/DriverContext.java index f43992c85d..ebf37ae645 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/DriverContext.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/DriverContext.java @@ -160,7 +160,7 @@ public synchronized void shutdown() { public static boolean isLaunchable(Task tsk) { // A launchable task is one that hasn't been queued, hasn't been // initialized, and is runnable. - return !tsk.getQueued() && !tsk.getInitialized() && tsk.isRunnable(); + return tsk.isNotRunning() && tsk.isNotInitialized() && tsk.isRunnable(); } public synchronized boolean addToRunnable(Task tsk) throws HiveException { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java index e1bd2918ca..0dfd0f7502 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/Task.java @@ -366,38 +366,46 @@ public void removeDependentTask(Task dependent) { } } } - public void setStarted() { + public synchronized void setStarted() { setState(TaskState.RUNNING); } - public boolean started() { + public synchronized boolean started() { return taskState == TaskState.RUNNING; } - public boolean done() { + public synchronized boolean done() { return taskState == TaskState.FINISHED; } - public void setDone() { + public synchronized void setDone() { setState(TaskState.FINISHED); } - public void setQueued() { + public synchronized void setQueued() { setState(TaskState.QUEUED); } - public boolean getQueued() { + public synchronized boolean getQueued() { return taskState == TaskState.QUEUED; } - public void setInitialized() { + public synchronized void setInitialized() { setState(TaskState.INITIALIZED); } - public boolean getInitialized() { + public synchronized boolean getInitialized() { return taskState == TaskState.INITIALIZED; } + public synchronized boolean isNotRunning() { + return taskState.ordinal() < TaskState.RUNNING.ordinal(); + } + + public synchronized boolean isNotInitialized() { + return taskState.ordinal() < TaskState.INITIALIZED.ordinal(); + } + public boolean isRunnable() { boolean isrunnable = true; if (parentTasks != null) {