SLIDER-320 rename activeContainers in appState (and all related methods) to ownedContainers ... differentiates from livecontainers better
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/7e2ce276 Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/7e2ce276 Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/7e2ce276 Branch: refs/heads/feature/SLIDER-151_REST_API Commit: 7e2ce2764153fea9a586d809fcf1ebd4f593255e Parents: 41e0c5b Author: Steve Loughran <ste...@apache.org> Authored: Fri Aug 15 14:29:32 2014 +0100 Committer: Steve Loughran <ste...@apache.org> Committed: Fri Aug 15 14:29:32 2014 +0100 ---------------------------------------------------------------------- .../server/appmaster/SliderAppMaster.java | 2 +- .../slider/server/appmaster/state/AppState.java | 72 +++++++++++++------- .../appmaster/state/ProviderAppState.java | 12 ++-- .../state/StateAccessForProviders.java | 6 +- .../appmaster/web/view/ContainerStatsBlock.java | 2 +- .../server/appmaster/web/view/IndexBlock.java | 3 +- 6 files changed, 61 insertions(+), 36 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7e2ce276/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java index acd6870..9a16188 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/SliderAppMaster.java @@ -1565,7 +1565,7 @@ public class SliderAppMaster extends AbstractSliderLaunchedService throws SliderException { log.info("containerLostContactWithProvider: container {} lost", containerId); - RoleInstance activeContainer = appState.getActiveContainer(containerId); + RoleInstance activeContainer = appState.getOwnedContainer(containerId); if (activeContainer != null) { executeRMOperations(appState.releaseContainer(containerId)); // ask for more containers if needed http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7e2ce276/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 0d2afcc..2f2eadd 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 @@ -163,7 +163,7 @@ public class AppState { * Hash map of the containers we have. This includes things that have * been allocated but are not live; it is a superset of the live list */ - private final ConcurrentMap<ContainerId, RoleInstance> activeContainers = + private final ConcurrentMap<ContainerId, RoleInstance> ownedContainers = new ConcurrentHashMap<ContainerId, RoleInstance>(); /** @@ -792,23 +792,49 @@ public class AppState { } - public synchronized List<RoleInstance> cloneActiveContainerList() { - Collection<RoleInstance> values = activeContainers.values(); + /** + * Clone the list of active (==owned) containers + * @return the list of role instances representing all owned containers + */ + public synchronized List<RoleInstance> cloneOwnedContainerList() { + Collection<RoleInstance> values = ownedContainers.values(); return new ArrayList<RoleInstance>(values); } - - public int getNumActiveContainers() { - return activeContainers.size(); + /** + * Get the number of active (==owned) containers + * @return + */ + public int getNumOwnedContainers() { + return ownedContainers.size(); } + /** + * Look up an active container: any container that the AM has, even + * if it is not currently running/live + */ + public RoleInstance getOwnedContainer(ContainerId id) { + return ownedContainers.get(id); + } - public RoleInstance getActiveContainer(ContainerId id) { - return activeContainers.get(id); + /** + * Remove an owned container + * @param id container ID + * @return the instance removed + */ + private RoleInstance removeOwnedContainer(ContainerId id) { + return ownedContainers.remove(id); } - - private RoleInstance removeActiveContainer(ContainerId id) { - return activeContainers.remove(id); + + /** + * set/update an owned container + * @param id container ID + * @param instance + * @return + */ + private RoleInstance putOwnedContainer(ContainerId id, + RoleInstance instance) { + return ownedContainers.put(id, instance); } /** @@ -885,7 +911,7 @@ public class AppState { boolean active) { List<RoleInstance> nodes = new ArrayList<RoleInstance>(); Collection<RoleInstance> allRoleInstances; - allRoleInstances = active? activeContainers.values() : liveNodes.values(); + allRoleInstances = active? ownedContainers.values() : liveNodes.values(); for (RoleInstance node : allRoleInstances) { if (node.roleId == roleId) { nodes.add(node); @@ -943,7 +969,7 @@ public class AppState { instance.container = container; instance.createTime = now(); getStartingNodes().put(container.getId(), instance); - activeContainers.put(container.getId(), instance); + putOwnedContainer(container.getId(), instance); roleHistory.onContainerStartSubmitted(container, instance); } @@ -960,7 +986,7 @@ public class AppState { throws SliderInternalStateException { ContainerId id = container.getId(); //look up the container - RoleInstance instance = getActiveContainer(id); + RoleInstance instance = getOwnedContainer(id); if (instance == null) { throw new SliderInternalStateException( "No active container with ID " + id); @@ -1110,7 +1136,7 @@ public class AppState { @VisibleForTesting public RoleInstance innerOnNodeManagerContainerStarted(ContainerId containerId) { incStartedCountainerCount(); - RoleInstance instance = activeContainers.get(containerId); + RoleInstance instance = getOwnedContainer(containerId); if (instance == null) { //serious problem throw new YarnRuntimeException("Container not in active containers start "+ @@ -1146,7 +1172,7 @@ public class AppState { */ public synchronized void onNodeManagerContainerStartFailed(ContainerId containerId, Throwable thrown) { - activeContainers.remove(containerId); + removeOwnedContainer(containerId); incFailedCountainerCount(); incStartFailedCountainerCount(); RoleInstance instance = getStartingNodes().remove(containerId); @@ -1246,7 +1272,7 @@ public class AppState { } else { //a container has failed result.containerFailed = true; - roleInstance = activeContainers.remove(containerId); + roleInstance = removeOwnedContainer(containerId); if (roleInstance != null) { //it was active, move it to failed incFailedCountainerCount(); @@ -1320,14 +1346,14 @@ public class AppState { } // and the active node list if present - removeActiveContainer(containerId); + removeOwnedContainer(containerId); // finally, verify the node doesn't exist any more assert !containersBeingReleased.containsKey( containerId) : "container still in release queue"; assert !getLiveNodes().containsKey( containerId) : " container still in live nodes"; - assert getActiveContainer(containerId) == + assert getOwnedContainer(containerId) == null : "Container still in active container list"; return result; @@ -1623,7 +1649,7 @@ public class AppState { public List<AbstractRMOperation> releaseContainer(ContainerId containerId) throws SliderInternalStateException { List<AbstractRMOperation> operations = new ArrayList<AbstractRMOperation>(); - List<RoleInstance> activeRoleInstances = cloneActiveContainerList(); + List<RoleInstance> activeRoleInstances = cloneOwnedContainerList(); for (RoleInstance role : activeRoleInstances) { if (role.container.getId().equals(containerId)) { containerReleaseSubmitted(role.container); @@ -1645,7 +1671,7 @@ public class AppState { * that can be released. */ private RoleInstance findRoleInstanceOnHost(NodeInstance node, int roleId) { - Collection<RoleInstance> targets = cloneActiveContainerList(); + Collection<RoleInstance> targets = cloneOwnedContainerList(); String hostname = node.hostname; for (RoleInstance ri : targets) { if (hostname.equals(RoleHistoryUtils.hostnameOf(ri.container)) @@ -1663,7 +1689,7 @@ public class AppState { */ public synchronized List<AbstractRMOperation> releaseAllContainers() { - Collection<RoleInstance> targets = cloneActiveContainerList(); + Collection<RoleInstance> targets = cloneOwnedContainerList(); log.info("Releasing {} containers", targets.size()); List<AbstractRMOperation> operations = new ArrayList<AbstractRMOperation>(targets.size()); @@ -1817,7 +1843,7 @@ public class AppState { instance.container = container; instance.createTime = now(); instance.state = ClusterDescription.STATE_LIVE; - activeContainers.put(cid, instance); + putOwnedContainer(cid, instance); //role history gets told roleHistory.onContainerAssigned(container); // pretend the container has just had its start actions submitted http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7e2ce276/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 a5b36d4..e7384c8 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 @@ -164,18 +164,18 @@ public class ProviderAppState implements StateAccessForProviders { } @Override - public List<RoleInstance> cloneActiveContainerList() { - return appState.cloneActiveContainerList(); + public List<RoleInstance> cloneOwnedContainerList() { + return appState.cloneOwnedContainerList(); } @Override - public int getNumActiveContainers() { - return appState.getNumActiveContainers(); + public int getNumOwnedContainers() { + return appState.getNumOwnedContainers(); } @Override - public RoleInstance getActiveContainer(ContainerId id) { - return appState.getActiveContainer(id); + public RoleInstance getOwnedContainer(ContainerId id) { + return appState.getOwnedContainer(id); } @Override http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7e2ce276/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 acba8cc..b236dfc 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 @@ -144,20 +144,20 @@ public interface StateAccessForProviders { * @return the active containers at the time * the call was made */ - List<RoleInstance> cloneActiveContainerList(); + List<RoleInstance> cloneOwnedContainerList(); /** * Get the number of active containers * @return the number of active containers the time the call was made */ - int getNumActiveContainers(); + int getNumOwnedContainers(); /** * Get any active container with the given ID * @param id container Id * @return the active container or null if it is not found */ - RoleInstance getActiveContainer(ContainerId id); + RoleInstance getOwnedContainer(ContainerId id); /** * Create a clone of the list of live cluster nodes. http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7e2ce276/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/ContainerStatsBlock.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/ContainerStatsBlock.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/ContainerStatsBlock.java index 5645e0e..95f0417 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/ContainerStatsBlock.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/ContainerStatsBlock.java @@ -96,7 +96,7 @@ public class ContainerStatsBlock extends HtmlBlock { protected void render(Block html) { // TODO Probably better to just get a copy of this list for us to avoid the repeated synchronization? // does this change if we have 50 node, 100node, 500 node clusters? - final Map<String,RoleInstance> containerInstances = getContainerInstances(slider.getAppState().cloneActiveContainerList()); + final Map<String,RoleInstance> containerInstances = getContainerInstances(slider.getAppState().cloneOwnedContainerList()); for (Entry<String,RoleStatus> entry : slider.getRoleStatusByName().entrySet()) { final String name = entry.getKey(); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/7e2ce276/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/IndexBlock.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/IndexBlock.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/IndexBlock.java index 90a3ee7..54bdb09 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/IndexBlock.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/view/IndexBlock.java @@ -30,7 +30,6 @@ import org.apache.slider.server.appmaster.web.WebAppApi; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.net.URL; import java.util.Map; import java.util.Map.Entry; @@ -63,7 +62,7 @@ public class IndexBlock extends HtmlBlock { UL<DIV<Hamlet>> ul = div.ul(); - ul.li("Total number of containers for cluster: " + appState.getNumActiveContainers()); + ul.li("Total number of containers for cluster: " + appState.getNumOwnedContainers()); ul.li("Cluster created: " + getInfoAvoidingNulls(StatusKeys.INFO_CREATE_TIME_HUMAN)); ul.li("Cluster last flexed: " + getInfoAvoidingNulls(StatusKeys.INFO_FLEX_TIME_HUMAN)); ul.li("Cluster running since: " + getInfoAvoidingNulls(StatusKeys.INFO_LIVE_TIME_HUMAN));