diff --git a/ql/src/java/org/apache/hadoop/hive/ql/QueryDisplay.java b/ql/src/java/org/apache/hadoop/hive/ql/QueryDisplay.java index 467dab66e454d895742e96d4ac5db452fea00551..d582bc063fc150002a01d63451ae6632fca29ac1 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/QueryDisplay.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/QueryDisplay.java @@ -72,7 +72,7 @@ private Long endTime; private String taskId; - private String taskExternalHandle; + private String externalHandle; public Task.TaskState taskState; private StageType taskType; @@ -85,7 +85,7 @@ public TaskDisplay() { } public TaskDisplay(Task task) { taskId = task.getId(); - taskExternalHandle = task.getExternalHandle(); + externalHandle = task.getExternalHandle(); taskType = task.getType(); name = task.getName(); requireLock = task.requireLock(); @@ -150,12 +150,15 @@ public synchronized boolean isRetryIfFail() { } public synchronized String getExternalHandle() { - return taskExternalHandle; + return externalHandle; } public synchronized void updateStatus(Task tTask) { this.taskState = tTask.getTaskState(); - switch(taskState) { + if (externalHandle == null && tTask.getExternalHandle() != null) { + this.externalHandle = tTask.getExternalHandle(); + } + switch (taskState) { case RUNNING: beginTime = System.currentTimeMillis(); break; diff --git a/service/src/test/org/apache/hive/service/cli/CLIServiceTest.java b/service/src/test/org/apache/hive/service/cli/CLIServiceTest.java index e145eb434159d43b90480bad6711f965a82072c5..698b13d66f100618aab3c3ee2cbf3c3df8477afe 100644 --- a/service/src/test/org/apache/hive/service/cli/CLIServiceTest.java +++ b/service/src/test/org/apache/hive/service/cli/CLIServiceTest.java @@ -45,6 +45,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.hadoop.hive.conf.HiveConf; +import org.apache.hadoop.hive.ql.plan.api.StageType; import org.apache.hadoop.hive.ql.session.SessionState; import org.junit.After; @@ -676,6 +677,7 @@ private void checkTaskStatuses(List taskDisplays) { switch (taskDisplay.taskState) { case INITIALIZED: case QUEUED: + assertNull(taskDisplay.getExternalHandle()); assertNull(taskDisplay.getBeginTime()); assertNull(taskDisplay.getEndTime()); assertNull(taskDisplay.getElapsedTime()); @@ -683,6 +685,9 @@ private void checkTaskStatuses(List taskDisplays) { assertNull(taskDisplay.getReturnValue()); break; case RUNNING: + if (taskDisplay.getTaskType() == StageType.MAPRED || taskDisplay.getTaskType() == StageType.MAPREDLOCAL) { + assertNotNull(taskDisplay.getExternalHandle()); + } assertNotNull(taskDisplay.getBeginTime()); assertNull(taskDisplay.getEndTime()); assertNotNull(taskDisplay.getElapsedTime()); @@ -690,6 +695,9 @@ private void checkTaskStatuses(List taskDisplays) { assertNull(taskDisplay.getReturnValue()); break; case FINISHED: + if (taskDisplay.getTaskType() == StageType.MAPRED || taskDisplay.getTaskType() == StageType.MAPREDLOCAL) { + assertNotNull(taskDisplay.getExternalHandle()); + } assertNotNull(taskDisplay.getBeginTime()); assertNotNull(taskDisplay.getEndTime()); assertNotNull(taskDisplay.getElapsedTime());