You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2017/02/07 20:59:25 UTC
[57/70] [abbrv] hive git commit: HIVE-15827: LLAP: status tool breaks
out of watch mode when live instances is 0 (Prasanth Jayachandran reviewed by
Sergey Shelukhin)
HIVE-15827: LLAP: status tool breaks out of watch mode when live instances is 0 (Prasanth Jayachandran reviewed by Sergey Shelukhin)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/70bd0ce8
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/70bd0ce8
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/70bd0ce8
Branch: refs/heads/hive-14535
Commit: 70bd0ce86e64a5ec02e824650a4cd1fe5c68ccba
Parents: 39a0d39
Author: Prasanth Jayachandran <pr...@apache.org>
Authored: Mon Feb 6 17:44:49 2017 -0800
Committer: Prasanth Jayachandran <pr...@apache.org>
Committed: Mon Feb 6 17:44:49 2017 -0800
----------------------------------------------------------------------
.../hive/llap/cli/LlapStatusServiceDriver.java | 37 ++++++++++++++++++--
1 file changed, 34 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/70bd0ce8/llap-server/src/java/org/apache/hadoop/hive/llap/cli/LlapStatusServiceDriver.java
----------------------------------------------------------------------
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..ab4173c 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 class LlapStatusServiceDriver {
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 @@ public class LlapStatusServiceDriver {
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 @@ public class LlapStatusServiceDriver {
Collection<ServiceInstance> 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 @@ public class LlapStatusServiceDriver {
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.
@@ -574,6 +590,8 @@ public class LlapStatusServiceDriver {
private Long appStartTime;
private Long appFinishTime;
+ private boolean runningThresholdAchieved = false;
+
private final List<LlapInstance> llapInstances = new LinkedList<>();
private transient Map<String, LlapInstance> containerToInstanceMap = new HashMap<>();
@@ -624,6 +642,11 @@ public class LlapStatusServiceDriver {
return this;
}
+ public AppStatusBuilder setRunningThresholdAchieved(boolean thresholdAchieved) {
+ this.runningThresholdAchieved = thresholdAchieved;
+ return this;
+ }
+
public LlapInstance removeAndgetLlapInstanceForContainer(String containerIdString) {
return containerToInstanceMap.remove(containerIdString);
}
@@ -682,6 +705,10 @@ public class LlapStatusServiceDriver {
return llapInstances;
}
+ public boolean isRunningThresholdAchieved() {
+ return runningThresholdAchieved;
+ }
+
@JsonIgnore
public AmInfo maybeCreateAndGetAmInfo() {
if (amInfo == null) {
@@ -993,7 +1020,7 @@ public class LlapStatusServiceDriver {
// 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: {}." +
@@ -1005,7 +1032,11 @@ public class LlapStatusServiceDriver {
continue;
} else {
desiredStateAttained = true;
+ statusServiceDriver.appStatusBuilder.setRunningThresholdAchieved(true);
}
+ } else {
+ numAttempts--;
+ continue;
}
}
}