diff --git llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/comparator/ShortestJobFirstComparator.java llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/comparator/ShortestJobFirstComparator.java index 9d7af7ebfb..1b44d7fba2 100644 --- llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/comparator/ShortestJobFirstComparator.java +++ llap-server/src/java/org/apache/hadoop/hive/llap/daemon/impl/comparator/ShortestJobFirstComparator.java @@ -48,6 +48,17 @@ public int compareInternal(TaskRunnerCallable o1, TaskRunnerCallable o2) { long waitTime1 = fri1.getCurrentAttemptStartTime() - fri1.getFirstAttemptStartTime(); long waitTime2 = fri2.getCurrentAttemptStartTime() - fri2.getFirstAttemptStartTime(); + if (waitTime1 == waitTime2) { + // verify if pending tasks are also same + if (knownPending1 == knownPending2) { + // first attempt for both + return Long.compare(fri1.getCurrentAttemptStartTime(), fri2.getCurrentAttemptStartTime()); + } else { + // if either of them is 1, then other one is greater and this comparison is enough + return Long.compare(knownPending1, knownPending2); + } + } + if (waitTime1 == 0 || waitTime2 == 0) { return knownPending1 - knownPending2; }