You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by st...@apache.org on 2015/02/06 18:39:51 UTC
[3/4] incubator-slider git commit: SLIDER-778 Clean up
AgentProviderService slightly
SLIDER-778 Clean up AgentProviderService slightly
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/19a6dfcd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/19a6dfcd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/19a6dfcd
Branch: refs/heads/develop
Commit: 19a6dfcd5ce94818b4bd2a08ebfaf50d99494aca
Parents: 2887c1d
Author: Steve Loughran <st...@apache.org>
Authored: Fri Feb 6 17:39:02 2015 +0000
Committer: Steve Loughran <st...@apache.org>
Committed: Fri Feb 6 17:39:02 2015 +0000
----------------------------------------------------------------------
.../java/org/apache/slider/api/ClusterNode.java | 26 ++++++++++++---
.../apache/slider/common/tools/SliderUtils.java | 4 +--
.../providers/agent/AgentProviderService.java | 5 +--
.../slider/server/appmaster/state/AppState.java | 12 ++++---
.../appmaster/state/ProviderAppState.java | 6 ++++
.../server/appmaster/state/RoleInstance.java | 35 ++++++++++++++++++++
.../state/StateAccessForProviders.java | 7 ++++
.../agent/TestAgentProviderService.java | 21 +++++++++---
8 files changed, 96 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/19a6dfcd/slider-core/src/main/java/org/apache/slider/api/ClusterNode.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/api/ClusterNode.java b/slider-core/src/main/java/org/apache/slider/api/ClusterNode.java
index cdfff35..2608cd7 100644
--- a/slider-core/src/main/java/org/apache/slider/api/ClusterNode.java
+++ b/slider-core/src/main/java/org/apache/slider/api/ClusterNode.java
@@ -36,7 +36,7 @@ import java.io.IOException;
*/
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL )
-public class ClusterNode {
+public final class ClusterNode implements Cloneable {
protected static final Logger
LOG = LoggerFactory.getLogger(ClusterDescription.class);
@@ -102,11 +102,13 @@ public class ClusterNode {
/**
* server-side ctor takes the container ID and builds the name from it
- * @param containerId container ID
+ * @param containerId container ID; can be null
*/
public ClusterNode(ContainerId containerId) {
- this.containerId = containerId;
- this.name = containerId.toString();
+ if (containerId != null) {
+ this.containerId = containerId;
+ this.name = containerId.toString();
+ }
}
/**
@@ -194,10 +196,24 @@ public class ClusterNode {
node.roleId = message.getRoleId();
node.state = message.getState();
node.host = message.getHost();
-// node.hostUrl = message.getHostURL();
+ node.hostUrl = message.getHostURL();
node.createTime = message.getCreateTime();
node.startTime = message.getStartTime();
node.released = message.getReleased();
return node;
}
+
+ @Override
+ public Object clone() throws CloneNotSupportedException {
+ return super.clone();
+ }
+
+ public ClusterNode doClone() {
+ try {
+ return (ClusterNode)clone();
+ } catch (CloneNotSupportedException e) {
+ //not going to happen. This is a final class
+ return null;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/19a6dfcd/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java b/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
index 6c69ad4..1e3379c 100644
--- a/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
+++ b/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
@@ -161,7 +161,7 @@ public final class SliderUtils {
*/
public static boolean isNotEmpty(List l) {
- return l == null || l.isEmpty();
+ return l != null && !l.isEmpty();
}
/**
@@ -170,7 +170,7 @@ public final class SliderUtils {
* @return true if the reference is valid and it contains map entries
*/
public static boolean isNotEmpty(Map m) {
- return m == null || m.isEmpty();
+ return m != null && !m.isEmpty();
}
/*
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/19a6dfcd/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
index f195432..10804cf 100644
--- a/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
+++ b/slider-core/src/main/java/org/apache/slider/providers/agent/AgentProviderService.java
@@ -1058,10 +1058,7 @@ public class AgentProviderService extends AbstractProviderService implements
* @return the map of role->node
*/
protected Map<String, Map<String, ClusterNode>> getRoleClusterNodeMapping() {
- amState.refreshClusterStatus();
- return (Map<String, Map<String, ClusterNode>>)
- amState.getClusterStatus().status.get(
- ClusterDescriptionKeys.KEY_CLUSTER_LIVE);
+ return amState.getRoleClusterNodeMapping();
}
private String getContainerLabel(Container container, String role) {
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/19a6dfcd/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
index 8c461e4..a4ca130 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
@@ -1112,11 +1112,14 @@ public class AppState {
}
return map;
}
+
+
/**
- * Build an instance map to send over the wire
- * @return the map of Role name to list of Cluster Nodes, ready
+ * Build a map of role->nodename->node-info
+ *
+ * @return the map of Role name to list of Cluster Nodes
*/
- private synchronized Map<String, Map<String, ClusterNode>> createRoleToClusterNodeMap() {
+ public synchronized Map<String, Map<String, ClusterNode>> createRoleToClusterNodeMap() {
Map<String, Map<String, ClusterNode>> map = new HashMap<String, Map<String, ClusterNode>>();
for (RoleInstance node : getLiveNodes().values()) {
@@ -1125,8 +1128,7 @@ public class AppState {
containers = new HashMap<String, ClusterNode>();
map.put(node.role, containers);
}
- Messages.RoleInstanceState pbuf = node.toProtobuf();
- ClusterNode clusterNode = ClusterNode.fromProtobuf(pbuf);
+ ClusterNode clusterNode = node.toClusterNode();
containers.put(clusterNode.name, clusterNode);
}
return map;
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/19a6dfcd/slider-core/src/main/java/org/apache/slider/server/appmaster/state/ProviderAppState.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/ProviderAppState.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/ProviderAppState.java
index 552e0a4..da91bbf 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/ProviderAppState.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/ProviderAppState.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.yarn.api.records.Container;
import org.apache.hadoop.yarn.api.records.ContainerId;
import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
import org.apache.slider.api.ClusterDescription;
+import org.apache.slider.api.ClusterNode;
import org.apache.slider.api.types.ApplicationLivenessInformation;
import org.apache.slider.api.types.ComponentInformation;
import org.apache.slider.core.conf.AggregateConf;
@@ -237,4 +238,9 @@ public class ProviderAppState implements StateAccessForProviders {
public Map<String, ComponentInformation> getComponentInfoSnapshot() {
return appState.getComponentInfoSnapshot();
}
+
+ @Override
+ public Map<String, Map<String, ClusterNode>> getRoleClusterNodeMapping() {
+ return appState.createRoleToClusterNodeMap();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/19a6dfcd/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleInstance.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleInstance.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleInstance.java
index 74abe72..4f9b222 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleInstance.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/RoleInstance.java
@@ -25,6 +25,7 @@ import org.apache.hadoop.yarn.api.records.NodeId;
import org.apache.hadoop.registry.client.binding.RegistryTypeUtils;
import org.apache.hadoop.registry.client.types.Endpoint;
import org.apache.hadoop.registry.client.types.ProtocolTypes;
+import org.apache.slider.api.ClusterNode;
import org.apache.slider.api.proto.Messages;
import org.apache.slider.api.types.ContainerInformation;
import org.apache.slider.common.tools.SliderUtils;
@@ -193,6 +194,40 @@ public final class RoleInstance implements Cloneable {
}
/**
+ * Build a serializable ClusterNode structure from this instance.
+ * This operation is unsynchronized.
+ * @return a serialized value.
+ */
+ public ClusterNode toClusterNode() {
+ ClusterNode node;
+ if (container != null) {
+ node = new ClusterNode(container.getId());
+ } else {
+ node = new ClusterNode();
+ node.name = "unallocated instance";
+ }
+ node.command = command;
+ node.createTime = createTime;
+ node.diagnostics = diagnostics;
+ if (environment != null) {
+ node.environment = Arrays.copyOf(environment, environment.length);
+ }
+ node.exitCode = exitCode;
+ node.host = host;
+ node.hostUrl = hostURL;
+ if (output != null) {
+ node.output = Arrays.copyOf(output, output.length);
+ }
+ node.released = released;
+ node.role = role;
+ node.roleId = roleId;
+ node.startTime = startTime ;
+ node.state = state;
+
+ return node;
+ }
+
+ /**
* Clone operation clones all the simple values but shares the
* Container object into the cloned copy -same with the output,
* diagnostics and env arrays.
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/19a6dfcd/slider-core/src/main/java/org/apache/slider/server/appmaster/state/StateAccessForProviders.java
----------------------------------------------------------------------
diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/StateAccessForProviders.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/StateAccessForProviders.java
index 13c67b0..a1c6f24 100644
--- a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/StateAccessForProviders.java
+++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/StateAccessForProviders.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.yarn.api.records.Container;
import org.apache.hadoop.yarn.api.records.ContainerId;
import org.apache.hadoop.yarn.exceptions.YarnRuntimeException;
import org.apache.slider.api.ClusterDescription;
+import org.apache.slider.api.ClusterNode;
import org.apache.slider.api.StatusKeys;
import org.apache.slider.api.types.ApplicationLivenessInformation;
import org.apache.slider.api.types.ComponentInformation;
@@ -258,4 +259,10 @@ public interface StateAccessForProviders {
* @return a map of current role status values.
*/
Map<String, ComponentInformation> getComponentInfoSnapshot();
+
+ /**
+ * Find out about the nodes for specific roles
+ * @return
+ */
+ Map<String, Map<String, ClusterNode>> getRoleClusterNodeMapping();
}
http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/19a6dfcd/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
----------------------------------------------------------------------
diff --git a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
index 3b78fb8..1a10ee3 100644
--- a/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
+++ b/slider-core/src/test/java/org/apache/slider/providers/agent/TestAgentProviderService.java
@@ -340,6 +340,10 @@ public class TestAgentProviderService {
desc.setOption(OptionKeys.ZOOKEEPER_QUORUM, "host1:2181");
desc.setInfo(OptionKeys.APPLICATION_NAME, "HBASE");
expect(access.getClusterStatus()).andReturn(desc).anyTimes();
+ Map<String, Map<String, ClusterNode>> cnMap =
+ new HashMap<String, Map<String, ClusterNode>>();
+ expect(access.getRoleClusterNodeMapping()).andReturn(cnMap).anyTimes();
+
AggregateConf aggConf = new AggregateConf();
ConfTreeOperations treeOps = aggConf.getAppConfOperations();
@@ -752,6 +756,18 @@ public class TestAgentProviderService {
public ClusterDescription getClusterStatus() {
ClusterDescription cd = new ClusterDescription();
cd.status = new HashMap<String, Object>();
+
+ cd.status.put(ClusterDescriptionKeys.KEY_CLUSTER_LIVE, buildRoleMap());
+
+ return cd;
+ }
+
+ @Override
+ public Map<String, Map<String, ClusterNode>> getRoleClusterNodeMapping() {
+ return buildRoleMap();
+ }
+
+ public Map<String, Map<String, ClusterNode>> buildRoleMap() {
Map<String, Map<String, ClusterNode>> roleMap = new HashMap<String, Map<String, ClusterNode>>();
ClusterNode cn1 = new ClusterNode(new MockContainerId(1));
cn1.host = "FIRST_HOST";
@@ -767,10 +783,7 @@ public class TestAgentProviderService {
roleMap.put("FIRST_ROLE", map1);
roleMap.put("SECOND_ROLE", map2);
-
- cd.status.put(ClusterDescriptionKeys.KEY_CLUSTER_LIVE, roleMap);
-
- return cd;
+ return roleMap;
}
@Override