diff --git a/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapStatusServiceDriver.java b/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapStatusServiceDriver.java index 39d542b..5c771a4 100644 --- a/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapStatusServiceDriver.java +++ b/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapStatusServiceDriver.java @@ -251,6 +251,9 @@ public int run(LlapStatusOptions options) { if (ret != ExitCode.SUCCESS) { return ret.getInt(); + } else if (EnumSet.of(State.APP_NOT_FOUND, State.COMPLETE, State.LAUNCHING) + .contains(appStatusBuilder.getState())) { + return ExitCode.SUCCESS.getInt(); } else { try { ret = populateAppStatusFromLlapRegistry(appStatusBuilder); @@ -435,6 +438,15 @@ private ExitCode populateAppStatusFromSlider(String appName, SliderClient slider int liveContainers = llapStats.get(StatusKeys.STATISTICS_CONTAINERS_LIVE); appStatusBuilder.setDesiredInstances(desiredContainers); appStatusBuilder.setLiveInstances(liveContainers); + if (liveContainers == 0) { + appStatusBuilder.setState(State.LAUNCHING); + } else { + if (desiredContainers >= liveContainers) { + appStatusBuilder.setState(State.RUNNING_ALL); + } else { + appStatusBuilder.setState(State.RUNNING_PARTIAL); + } + } } else { throw new LlapStatusCliException(ExitCode.SLIDER_CLIENT_ERROR_OTHER, "Failed to get statistics for LLAP"); // Error since LLAP should always exist. @@ -496,7 +508,7 @@ private ExitCode populateAppStatusFromLlapRegistry(AppStatusBuilder appStatusBui Collection serviceInstances; try { serviceInstances = llapRegistry.getInstances().getAll(); - } catch (IOException e) { + } catch (Exception e) { throw new LlapStatusCliException(ExitCode.LLAP_REGISTRY_ERROR, "Failed to get instances from llap registry", e); } @@ -540,7 +552,11 @@ private ExitCode populateAppStatusFromLlapRegistry(AppStatusBuilder appStatusBui LOG.warn("Found more entries in LLAP registry, as compared to desired entries"); } } else { - appStatusBuilder.setState(State.RUNNING_PARTIAL); + if (validatedInstances.size() > 0) { + appStatusBuilder.setState(State.RUNNING_PARTIAL); + } else { + appStatusBuilder.setState(State.LAUNCHING); + } } // At this point, everything that can be consumed from AppStatusBuilder has been consumed. @@ -993,7 +1009,7 @@ public static void main(String[] args) { // we have reached RUNNING state, now check if running nodes threshold is met final int liveInstances = statusServiceDriver.appStatusBuilder.getLiveInstances(); final int desiredInstances = statusServiceDriver.appStatusBuilder.getDesiredInstances(); - if (liveInstances > 0 && desiredInstances > 0) { + if (desiredInstances > 0) { final float ratio = (float) liveInstances / (float) desiredInstances; if (ratio < runningNodesThreshold) { LOG.warn("Waiting until running nodes threshold is reached. Current: {} Desired: {}." + @@ -1006,6 +1022,9 @@ public static void main(String[] args) { } else { desiredStateAttained = true; } + } else { + numAttempts--; + continue; } } }