SLIDER-782: cut out the SliderClusterProtocol element from the WebAppAPI; it should not be needed
Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/c94965f5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/c94965f5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/c94965f5 Branch: refs/heads/feature/SLIDER-779_Move_to_Groovy_2.4.0 Commit: c94965f59a75317fee13fab3a3a72bd9e43aab08 Parents: 4b56e54 Author: Steve Loughran <[email protected]> Authored: Wed Feb 11 20:52:50 2015 +0000 Committer: Steve Loughran <[email protected]> Committed: Wed Feb 11 20:52:50 2015 +0000 ---------------------------------------------------------------------- .../server/appmaster/SliderAppMaster.java | 2 +- .../slider/server/appmaster/web/WebAppApi.java | 5 - .../server/appmaster/web/WebAppApiImpl.java | 12 +- .../appmaster/web/view/ContainerStatsBlock.java | 48 ++++---- .../appstate/StubSliderClusterProtocol.groovy | 111 ------------------- .../TestMockAppStateAppRestIntegration.groovy | 3 +- .../view/TestClusterSpecificationBlock.groovy | 1 - .../web/view/TestContainerStatsBlock.groovy | 1 - .../appmaster/web/view/TestIndexBlock.groovy | 1 - .../web/rest/agent/TestAMAgentWebServices.java | 3 +- .../management/TestAMManagementWebServices.java | 3 +- 11 files changed, 31 insertions(+), 159 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/c94965f5/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 7f3211e..f18fb2c 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 @@ -922,7 +922,7 @@ public class SliderAppMaster extends AbstractSliderLaunchedService // Web service endpoints: initialize WebAppApiImpl webAppApi = - new WebAppApiImpl(this, + new WebAppApiImpl( stateForProviders, providerService, certificateManager, http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/c94965f5/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApi.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApi.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApi.java index e198e35..f1bff64 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApi.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApi.java @@ -52,11 +52,6 @@ public interface WebAppApi { CertificateManager getCertificateManager(); /** - * The {@link SliderClusterProtocol} for the current cluster - */ - SliderClusterProtocol getClusterProtocol(); - - /** * Generate a mapping from role name to its {@link RoleStatus}. Be aware that this * is a computed value and not just a getter */ http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/c94965f5/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApiImpl.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApiImpl.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApiImpl.java index 4eb984f..a7d85af 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApiImpl.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/web/WebAppApiImpl.java @@ -17,7 +17,6 @@ package org.apache.slider.server.appmaster.web; import org.apache.hadoop.registry.client.api.RegistryOperations; -import org.apache.slider.api.SliderClusterProtocol; import org.apache.slider.providers.ProviderService; import org.apache.slider.server.appmaster.AppMasterActionOperations; import org.apache.slider.server.appmaster.actions.QueueAccess; @@ -41,7 +40,6 @@ import static com.google.common.base.Preconditions.checkNotNull; public class WebAppApiImpl implements WebAppApi { private static final Logger log = LoggerFactory.getLogger(WebAppApiImpl.class); - protected final SliderClusterProtocol clusterProto; protected final StateAccessForProviders appState; protected final ProviderService provider; protected final CertificateManager certificateManager; @@ -50,8 +48,7 @@ public class WebAppApiImpl implements WebAppApi { private final QueueAccess queues; private final AppMasterActionOperations appMasterOperations; - public WebAppApiImpl(SliderClusterProtocol clusterProto, - StateAccessForProviders appState, + public WebAppApiImpl(StateAccessForProviders appState, ProviderService provider, CertificateManager certificateManager, RegistryOperations registryOperations, @@ -59,13 +56,11 @@ public class WebAppApiImpl implements WebAppApi { QueueAccess queues, AppMasterActionOperations appMasterOperations) { this.appMasterOperations = appMasterOperations; - checkNotNull(clusterProto); checkNotNull(appState); checkNotNull(provider); this.queues = queues; this.registryOperations = registryOperations; - this.clusterProto = clusterProto; this.appState = appState; this.provider = provider; this.certificateManager = certificateManager; @@ -88,11 +83,6 @@ public class WebAppApiImpl implements WebAppApi { } @Override - public SliderClusterProtocol getClusterProtocol() { - return clusterProto; - } - - @Override public Map<String,RoleStatus> getRoleStatusByName() { List<RoleStatus> roleStatuses = appState.cloneRoleStatusList(); Map<String, RoleStatus> map = http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/c94965f5/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 95f0417..da5ff05 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 @@ -29,13 +29,14 @@ import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.TR; import org.apache.hadoop.yarn.webapp.view.HtmlBlock; import org.apache.slider.api.ClusterDescription; import org.apache.slider.api.ClusterNode; -import org.apache.slider.client.SliderClusterOperations; +import org.apache.slider.api.types.ComponentInformation; import org.apache.slider.server.appmaster.state.RoleInstance; -import org.apache.slider.server.appmaster.state.RoleStatus; +import org.apache.slider.server.appmaster.state.StateAccessForProviders; import org.apache.slider.server.appmaster.web.WebAppApi; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -55,12 +56,10 @@ public class ContainerStatsBlock extends HtmlBlock { protected static final Function<Entry<String,String>,Entry<TableContent,String>> stringStringPairFunc = toTableContentFunction(); private WebAppApi slider; - private SliderClusterOperations clusterOps; @Inject public ContainerStatsBlock(WebAppApi slider) { this.slider = slider; - clusterOps = new SliderClusterOperations(slider.getClusterProtocol()); } /** @@ -94,29 +93,33 @@ public class ContainerStatsBlock extends HtmlBlock { @Override 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().cloneOwnedContainerList()); + StateAccessForProviders appState = slider.getAppState(); + final Map<String,RoleInstance> containerInstances = getContainerInstances( + appState.cloneOwnedContainerList()); - for (Entry<String,RoleStatus> entry : slider.getRoleStatusByName().entrySet()) { + Map<String, Map<String, ClusterNode>> clusterNodeMap = + appState.getRoleClusterNodeMapping(); + Map<String, ComponentInformation> componentInfoMap = appState.getComponentInfoSnapshot(); + + for (Entry<String, Map<String, ClusterNode>> entry : clusterNodeMap.entrySet()) { final String name = entry.getKey(); - final RoleStatus roleStatus = entry.getValue(); + Map<String, ClusterNode> clusterNodesInRole = entry.getValue(); + //final RoleStatus roleStatus = entry.getValue(); DIV<Hamlet> div = html.div("role-info ui-widget-content ui-corner-all"); - List<ClusterNode> nodesInRole; - try { - nodesInRole = clusterOps.listClusterNodesInRole(name); - } catch (Exception e) { - log.error("Could not fetch containers for role: " + name, e); - nodesInRole = Collections.emptyList(); - } + List<ClusterNode> nodesInRole = + new ArrayList<ClusterNode>(clusterNodesInRole.values()); div.h2(BOLD, StringUtils.capitalize(name)); // Generate the details on this role - Iterable<Entry<String,Integer>> stats = roleStatus.buildStatistics().entrySet(); - generateRoleDetails(div,"role-stats-wrap", "Specifications", Iterables.transform(stats, stringIntPairFunc)); + ComponentInformation componentInfo = componentInfoMap.get(name); + if (componentInfo != null) { + Iterable<Entry<String,Integer>> stats = componentInfo.buildStatistics().entrySet(); + generateRoleDetails(div,"role-stats-wrap", "Specifications", + Iterables.transform(stats, stringIntPairFunc)); + } // Sort the ClusterNodes by their name (containerid) Collections.sort(nodesInRole, new ClusterNodeNameComparator()); @@ -133,7 +136,8 @@ public class ContainerStatsBlock extends HtmlBlock { RoleInstance roleInst = containerInstances.get(containerId); if (roleInst.container.getNodeHttpAddress() != null) { return Maps.<TableContent,String> immutableEntry( - new TableAnchorContent(containerId, buildNodeUrlForContainer(roleInst.container.getNodeHttpAddress(), containerId)), null); + new TableAnchorContent(containerId, + buildNodeUrlForContainer(roleInst.container.getNodeHttpAddress(), containerId)), null); } } return Maps.immutableEntry(new TableContent(input.name), null); @@ -141,9 +145,9 @@ public class ContainerStatsBlock extends HtmlBlock { })); - ClusterDescription desc = slider.getAppState().getClusterStatus(); - Map<String,String> options = desc.getRole(name); - Iterable<Entry<TableContent,String>> tableContent; + ClusterDescription desc = appState.getClusterStatus(); + Map<String, String> options = desc.getRole(name); + Iterable<Entry<TableContent, String>> tableContent; // Generate the pairs of data in the expected form if (null != options) { http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/c94965f5/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/StubSliderClusterProtocol.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/StubSliderClusterProtocol.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/StubSliderClusterProtocol.groovy deleted file mode 100644 index eb05d61..0000000 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/StubSliderClusterProtocol.groovy +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.slider.server.appmaster.model.appstate - -import org.apache.hadoop.ipc.ProtocolSignature -import org.apache.hadoop.yarn.exceptions.YarnException -import org.apache.slider.api.SliderClusterProtocol -import org.apache.slider.api.proto.Messages - -/** - * Stub implementation of the Protobuf <code>SliderClusterProtocol</code> - */ -class StubSliderClusterProtocol implements SliderClusterProtocol { - @Override - Messages.StopClusterResponseProto stopCluster( - Messages.StopClusterRequestProto request) - throws IOException, YarnException { - throw new UnsupportedOperationException() - } - - @Override - Messages.FlexClusterResponseProto flexCluster( - Messages.FlexClusterRequestProto request) - throws IOException, YarnException { - throw new UnsupportedOperationException() - } - - @Override - Messages.GetJSONClusterStatusResponseProto getJSONClusterStatus( - Messages.GetJSONClusterStatusRequestProto request) - throws IOException, YarnException { - throw new UnsupportedOperationException() - } - - @Override - Messages.ListNodeUUIDsByRoleResponseProto listNodeUUIDsByRole( - Messages.ListNodeUUIDsByRoleRequestProto request) - throws IOException, YarnException { - throw new UnsupportedOperationException() - } - - @Override - Messages.GetNodeResponseProto getNode(Messages.GetNodeRequestProto request) - throws IOException, YarnException { - throw new UnsupportedOperationException() - } - - @Override - Messages.GetClusterNodesResponseProto getClusterNodes( - Messages.GetClusterNodesRequestProto request) - throws IOException, YarnException { - throw new UnsupportedOperationException() - } - - @Override - Messages.EchoResponseProto echo(Messages.EchoRequestProto request) - throws IOException, YarnException { - throw new UnsupportedOperationException() - } - - @Override - Messages.KillContainerResponseProto killContainer( - Messages.KillContainerRequestProto request) - throws IOException, YarnException { - throw new UnsupportedOperationException() - } - - @Override - Messages.AMSuicideResponseProto amSuicide( - Messages.AMSuicideRequestProto request) - throws IOException, YarnException { - throw new UnsupportedOperationException() - } - - @Override - Messages.GetInstanceDefinitionResponseProto getInstanceDefinition( - Messages.GetInstanceDefinitionRequestProto request) - throws IOException, YarnException { - throw new UnsupportedOperationException() - } - - @Override - long getProtocolVersion(String protocol, long clientVersion) - throws IOException { - return 0 - } - - @Override - ProtocolSignature getProtocolSignature( - String protocol, - long clientVersion, - int clientMethodsHash) throws IOException { - throw new UnsupportedOperationException() - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/c94965f5/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateAppRestIntegration.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateAppRestIntegration.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateAppRestIntegration.groovy index a43ee1e..e42f13c 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateAppRestIntegration.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/model/appstate/TestMockAppStateAppRestIntegration.groovy @@ -114,8 +114,7 @@ class TestMockAppStateAppRestIntegration extends BaseMockAppStateTest implements } public WebAppApi getWebAppApi() { - WebAppApi api = new WebAppApiImpl(new StubSliderClusterProtocol(), - stateAccess, + WebAppApi api = new WebAppApiImpl(stateAccess, new MockProviderService(), null, null, new MetricsAndMonitoring("metrics"), null, null) http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/c94965f5/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestClusterSpecificationBlock.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestClusterSpecificationBlock.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestClusterSpecificationBlock.groovy index 8976f1c..d6482a5 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestClusterSpecificationBlock.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestClusterSpecificationBlock.groovy @@ -53,7 +53,6 @@ public class TestClusterSpecificationBlock { ProviderService providerService = new MockProviderService(); WebAppApiImpl inst = new WebAppApiImpl( - clusterProto, providerAppState, providerService, null, http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/c94965f5/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy index 297b8e7..f3283c4 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestContainerStatsBlock.groovy @@ -60,7 +60,6 @@ public class TestContainerStatsBlock extends BaseMockAppStateTest { appState) WebAppApiImpl inst = new WebAppApiImpl( - clusterProto, providerAppState, providerService, null, http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/c94965f5/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy ---------------------------------------------------------------------- diff --git a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy index 4a053fd..4b91ca0 100644 --- a/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy +++ b/slider-core/src/test/groovy/org/apache/slider/server/appmaster/web/view/TestIndexBlock.groovy @@ -52,7 +52,6 @@ public class TestIndexBlock extends BaseMockAppStateTest { appState) WebAppApiImpl inst = new WebAppApiImpl( - clusterProto, providerAppState, providerService, null, http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/c94965f5/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/agent/TestAMAgentWebServices.java ---------------------------------------------------------------------- diff --git a/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/agent/TestAMAgentWebServices.java b/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/agent/TestAMAgentWebServices.java index b75d51d..edfebbd 100644 --- a/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/agent/TestAMAgentWebServices.java +++ b/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/agent/TestAMAgentWebServices.java @@ -38,7 +38,6 @@ import org.apache.slider.server.appmaster.management.MetricsAndMonitoring; import org.apache.slider.server.appmaster.model.mock.MockFactory; import org.apache.slider.server.appmaster.model.mock.MockProviderService; import org.apache.slider.server.appmaster.model.mock.MockRecordFactory; -import org.apache.slider.server.appmaster.model.mock.MockSliderClusterProtocol; import org.apache.slider.server.appmaster.state.AppState; import org.apache.slider.server.appmaster.state.ProviderAppState; import org.apache.slider.server.appmaster.state.SimpleReleaseSelector; @@ -143,7 +142,7 @@ public class TestAMAgentWebServices { ProviderAppState providerAppState = new ProviderAppState("undefined", appState); - slider = new WebAppApiImpl(new MockSliderClusterProtocol(), providerAppState, + slider = new WebAppApiImpl(providerAppState, new MockProviderService(), null, null, null, null, null); http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/c94965f5/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/management/TestAMManagementWebServices.java ---------------------------------------------------------------------- diff --git a/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/management/TestAMManagementWebServices.java b/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/management/TestAMManagementWebServices.java index 5a6ec96..badfbc3 100644 --- a/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/management/TestAMManagementWebServices.java +++ b/slider-core/src/test/java/org/apache/slider/server/appmaster/web/rest/management/TestAMManagementWebServices.java @@ -43,7 +43,6 @@ import org.apache.slider.server.appmaster.management.MetricsAndMonitoring; import org.apache.slider.server.appmaster.model.mock.MockFactory; import org.apache.slider.server.appmaster.model.mock.MockProviderService; import org.apache.slider.server.appmaster.model.mock.MockRecordFactory; -import org.apache.slider.server.appmaster.model.mock.MockSliderClusterProtocol; import org.apache.slider.server.appmaster.state.AppState; import org.apache.slider.server.appmaster.state.ProviderAppState; import org.apache.slider.server.appmaster.state.SimpleReleaseSelector; @@ -191,7 +190,7 @@ public class TestAMManagementWebServices extends JerseyTest { ProviderAppState providerAppState = new ProviderAppState("undefined", appState); - slider = new WebAppApiImpl(new MockSliderClusterProtocol(), providerAppState, + slider = new WebAppApiImpl(providerAppState, new MockProviderService(), null, null, null, null, null);
