Updated Branches: refs/heads/trunk 3d8ecddd5 -> 26041800e
AMBARI-3053. API to show Ambari Server version. (odiachenko) Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/26041800 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/26041800 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/26041800 Branch: refs/heads/trunk Commit: 26041800e4fca766b5999ecf33fc922dacc4203f Parents: 3d8ecdd Author: Oleksandr Diachenko <[email protected]> Authored: Tue Sep 3 17:33:44 2013 +0300 Committer: Oleksandr Diachenko <[email protected]> Committed: Tue Sep 3 17:33:44 2013 +0300 ---------------------------------------------------------------------- .../RootServiceComponentResponse.java | 21 +++++++++-- .../RootServiceHostComponentResponse.java | 17 +++++++++ .../controller/RootServiceResponseFactory.java | 36 +++++++++++++++++-- .../RootServiceComponentResourceProvider.java | 6 ++++ ...ootServiceHostComponentResourceProvider.java | 5 +++ .../src/main/resources/properties.json | 4 ++- .../RootServiceResponseFactoryTest.java | 37 ++++++++++++++++---- ...ootServiceComponentResourceProviderTest.java | 12 ++++--- ...erviceHostComponentResourceProviderTest.java | 14 ++++---- 9 files changed, 129 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/26041800/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceComponentResponse.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceComponentResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceComponentResponse.java index da25494..cb4415c 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceComponentResponse.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceComponentResponse.java @@ -25,10 +25,13 @@ public class RootServiceComponentResponse { private String componentName; private Map<String, String> properties; + private String componentVersion; - public RootServiceComponentResponse(String componentName, Map<String, String> properties) { + public RootServiceComponentResponse(String componentName, String componentVersion, Map<String, String> properties) { this.componentName = componentName; + this.setComponentVersion(componentVersion); this.setProperties(properties); + } public String getComponentName() { @@ -43,6 +46,14 @@ public class RootServiceComponentResponse { this.properties = properties; } + public String getComponentVersion() { + return componentVersion; + } + + public void setComponentVersion(String componentVersion) { + this.componentVersion = componentVersion; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -55,6 +66,11 @@ public class RootServiceComponentResponse { return false; } + if (componentVersion != null ? + !componentVersion.equals(that.componentVersion) : that.componentVersion != null) { + return false; + } + if (properties != null ? !properties.equals(that.properties) : that.properties != null) { return false; @@ -67,8 +83,7 @@ public class RootServiceComponentResponse { public int hashCode() { int result = 1; result = 31 + (componentName != null ? componentName.hashCode() : 0); + result += (componentVersion != null ? componentVersion.hashCode() : 0); return result; } - - } http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/26041800/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceHostComponentResponse.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceHostComponentResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceHostComponentResponse.java index 9669289..9565afd 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceHostComponentResponse.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceHostComponentResponse.java @@ -25,13 +25,17 @@ public class RootServiceHostComponentResponse { private String hostName; private String componentName; private String componentState; + private String componentVersion; private Map<String, String> properties; + public RootServiceHostComponentResponse(String hostName, String componentName, String componentState, + String componentVersion, Map<String, String> properties) { this.hostName = hostName; this.componentName = componentName; this.componentState = componentState; + this.componentVersion = componentVersion; this.properties = properties; } @@ -77,6 +81,11 @@ public class RootServiceHostComponentResponse { return false; } + if (componentVersion != null ? + !componentVersion.equals(that.componentVersion) : that.componentVersion != null) { + return false; + } + if (properties != null ? !properties.equals(that.properties) : that.properties != null) { return false; @@ -91,6 +100,7 @@ public class RootServiceHostComponentResponse { result = 31 + (hostName != null ? hostName.hashCode() : 0); result = result + (componentName != null ? componentName.hashCode() : 0); result = result + (componentState != null ? componentState.hashCode() : 0); + result = result + (componentVersion != null ? componentVersion.hashCode() : 0); return result; } @@ -102,4 +112,11 @@ public class RootServiceHostComponentResponse { this.componentState = componentState; } + public String getComponentVersion() { + return componentVersion; + } + + public void setComponentVersion(String componentVersion) { + this.componentVersion = componentVersion; + } } http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/26041800/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceResponseFactory.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceResponseFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceResponseFactory.java index 3c44127..42bcfbe 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceResponseFactory.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceResponseFactory.java @@ -25,6 +25,7 @@ import java.util.Set; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.ObjectNotFoundException; +import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.utils.StageUtils; import org.apache.commons.collections.CollectionUtils; @@ -37,9 +38,14 @@ public class RootServiceResponseFactory extends AbstractRootServiceResponseFactory { private static final String RUNNING_STATE = "RUNNING"; + public static final String NOT_APPLICABLE = "NOT_APPLICABLE"; @Inject private Configuration configs; + @Inject + private AmbariMetaInfo ambariMetaInfo; + + @Override public Set<RootServiceResponse> getRootServices(RootServiceRequest request) throws ObjectNotFoundException { @@ -99,16 +105,42 @@ public class RootServiceResponseFactory extends throw new ObjectNotFoundException("Component name: " + componentName); } response = Collections.singleton(new RootServiceComponentResponse(component.toString(), + getComponentVersion(componentName, null), getComponentProperties(componentName))); } else { for (Components component: service.getComponents()) response.add(new RootServiceComponentResponse(component.toString(), + getComponentVersion(component.name(), null), getComponentProperties(component.name()))); } return response; } + private String getComponentVersion(String componentName, HostResponse host) { + Components component = Components.valueOf(componentName); + String componentVersion; + + switch (component) { + case AMBARI_SERVER: + componentVersion = ambariMetaInfo.getServerVersion(); + break; + case AMBARI_AGENT: + //Could be defined on level of host component + + if (host == null) + componentVersion = NOT_APPLICABLE; + else + componentVersion = host.getAgentVersion().getVersion(); + break; + + default: + componentVersion = null; + } + + return componentVersion; + } + private Map<String, String> getComponentProperties(String componentName){ Map<String, String> response; @@ -176,10 +208,10 @@ public class RootServiceResponseFactory extends if (component.getComponentName().equals(Components.AMBARI_SERVER.name())) response.add(new RootServiceHostComponentResponse(host.getHostname(), component.getComponentName(), - RUNNING_STATE, component.getProperties())); + RUNNING_STATE, getComponentVersion(component.getComponentName(), host), component.getProperties())); else response.add(new RootServiceHostComponentResponse(host.getHostname(), component.getComponentName(), - host.getHostState(), component.getProperties())); + host.getHostState(), getComponentVersion(component.getComponentName(), host), component.getProperties())); } } http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/26041800/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RootServiceComponentResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RootServiceComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RootServiceComponentResourceProvider.java index c90f65d..947edbe 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RootServiceComponentResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RootServiceComponentResourceProvider.java @@ -48,6 +48,9 @@ public class RootServiceComponentResourceProvider extends public static final String COMPONENT_NAME_PROPERTY_ID = PropertyHelper .getPropertyId("RootServiceComponents", "component_name"); + public static final String COMPONENT_VERSION_PROPERTY_ID = PropertyHelper + .getPropertyId("RootServiceComponents", "component_version"); + public static final String PROPERTIES_PROPERTY_ID = PropertyHelper .getPropertyId("RootServiceComponents", "properties"); @@ -90,6 +93,9 @@ public class RootServiceComponentResourceProvider extends setResourceProperty(resource, PROPERTIES_PROPERTY_ID, response.getProperties(), requestedIds); + + setResourceProperty(resource, COMPONENT_VERSION_PROPERTY_ID, + response.getComponentVersion(), requestedIds); resources.add(resource); } http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/26041800/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RootServiceHostComponentResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RootServiceHostComponentResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RootServiceHostComponentResourceProvider.java index e76dc96..98a65bc 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RootServiceHostComponentResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RootServiceHostComponentResourceProvider.java @@ -48,6 +48,8 @@ public class RootServiceHostComponentResourceProvider extends .getPropertyId("RootServiceHostComponents", "host_name"); public static final String COMPONENT_NAME_PROPERTY_ID = PropertyHelper .getPropertyId("RootServiceHostComponents", "component_name"); + public static final String COMPONENT_VERSION_PROPERTY_ID = PropertyHelper + .getPropertyId("RootServiceHostComponents", "component_version"); public static final String COMPONENT_STATE_PROPERTY_ID = PropertyHelper .getPropertyId("RootServiceHostComponents", "component_state"); public static final String PROPERTIES_PROPERTY_ID = PropertyHelper @@ -98,6 +100,9 @@ public class RootServiceHostComponentResourceProvider extends setResourceProperty(resource, COMPONENT_STATE_PROPERTY_ID, response.getComponentState(), requestedIds); + setResourceProperty(resource, COMPONENT_VERSION_PROPERTY_ID, + response.getComponentVersion(), requestedIds); + setResourceProperty(resource, PROPERTIES_PROPERTY_ID, response.getProperties(), requestedIds); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/26041800/ambari-server/src/main/resources/properties.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/properties.json b/ambari-server/src/main/resources/properties.json index a0aa464..b06ccf6 100644 --- a/ambari-server/src/main/resources/properties.json +++ b/ambari-server/src/main/resources/properties.json @@ -245,13 +245,15 @@ "RootServiceComponent":[ "RootServiceComponents/service_name", "RootServiceComponents/component_name", - "RootServiceComponents/properties" + "RootServiceComponents/properties", + "RootServiceComponents/component_version" ], "RootServiceHostComponent":[ "RootServiceHostComponents/service_name", "RootServiceHostComponents/component_name", "RootServiceHostComponents/host_name", "RootServiceHostComponents/component_state", + "RootServiceHostComponents/component_version", "RootServiceHostComponents/properties" ] } http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/26041800/ambari-server/src/test/java/org/apache/ambari/server/controller/RootServiceResponseFactoryTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/RootServiceResponseFactoryTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/RootServiceResponseFactoryTest.java index 4697fc8..b7d0a29 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/RootServiceResponseFactoryTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/RootServiceResponseFactoryTest.java @@ -21,28 +21,50 @@ package org.apache.ambari.server.controller; import java.util.Collections; import java.util.Set; import org.apache.ambari.server.ObjectNotFoundException; +import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.controller.RootServiceResponseFactory.Components; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.junit.Before; import org.junit.Test; + +import com.google.inject.AbstractModule; import com.google.inject.Guice; +import com.google.inject.Inject; import com.google.inject.Injector; import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class RootServiceResponseFactoryTest { - private RootServiceResponseFactory responseFactory; + private AbstractRootServiceResponseFactory responseFactory; private Injector injector; - private Configuration configs; - + + @Inject + Configuration configs; + + @Inject + AmbariMetaInfo ambariMetaInfo; + + public class MockModule extends AbstractModule { + + @Override + protected void configure() { + AmbariMetaInfo ambariMetaInfo = mock(AmbariMetaInfo.class); + bind(AmbariMetaInfo.class).toInstance(ambariMetaInfo); + } + } + @Before - public void setUp() { - injector = Guice.createInjector(new InMemoryDefaultTestModule()); + public void setUp() throws Exception{ + injector = Guice.createInjector(new InMemoryDefaultTestModule(), new MockModule()); + injector.injectMembers(this); responseFactory = injector.getInstance(RootServiceResponseFactory.class); - configs = injector.getInstance(Configuration.class); + + when(ambariMetaInfo.getServerVersion()).thenReturn("1.2.3"); } @Test @@ -123,10 +145,12 @@ public class RootServiceResponseFactoryTest { RootServiceResponseFactory.Components.AMBARI_SERVER.name())) assertTrue(rootServiceComponents .contains(new RootServiceComponentResponse(component.name(), + ambariMetaInfo.getServerVersion(), configs.getConfigsMap()))); else assertTrue(rootServiceComponents .contains(new RootServiceComponentResponse(component.name(), + RootServiceResponseFactory.NOT_APPLICABLE, Collections.<String, String> emptyMap()))); } @@ -140,6 +164,7 @@ public class RootServiceResponseFactoryTest { assertEquals(1, rootServiceComponents.size()); assertTrue(rootServiceComponents.contains(new RootServiceComponentResponse( RootServiceResponseFactory.Services.AMBARI.getComponents()[0].name(), + ambariMetaInfo.getServerVersion(), configs.getConfigsMap()))); // Request existent service name, and component, not belongs to requested service http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/26041800/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RootServiceComponentResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RootServiceComponentResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RootServiceComponentResourceProviderTest.java index df9e42b..a49ad22 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RootServiceComponentResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RootServiceComponentResourceProviderTest.java @@ -49,12 +49,12 @@ public class RootServiceComponentResourceProviderTest { AmbariManagementController managementController = createMock(AmbariManagementController.class); Set<RootServiceComponentResponse> allResponse = new HashSet<RootServiceComponentResponse>(); - allResponse.add(new RootServiceComponentResponse("component1", Collections.<String,String>emptyMap())); - allResponse.add(new RootServiceComponentResponse("component2", Collections.<String,String>emptyMap())); - allResponse.add(new RootServiceComponentResponse("component3", Collections.<String,String>emptyMap())); + allResponse.add(new RootServiceComponentResponse("component1", "1.1.1", Collections.<String,String>emptyMap())); + allResponse.add(new RootServiceComponentResponse("component2", "1.1.1", Collections.<String,String>emptyMap())); + allResponse.add(new RootServiceComponentResponse("component3", "1.1.1", Collections.<String,String>emptyMap())); Set<RootServiceComponentResponse> nameResponse = new HashSet<RootServiceComponentResponse>(); - nameResponse.add(new RootServiceComponentResponse("component4", Collections.<String,String>emptyMap())); + nameResponse.add(new RootServiceComponentResponse("component4", "1.1.1", Collections.<String,String>emptyMap())); // set expectations @@ -74,6 +74,7 @@ public class RootServiceComponentResourceProviderTest { propertyIds.add(RootServiceComponentResourceProvider.SERVICE_NAME_PROPERTY_ID); propertyIds.add(RootServiceComponentResourceProvider.COMPONENT_NAME_PROPERTY_ID); propertyIds.add(RootServiceComponentResourceProvider.PROPERTIES_PROPERTY_ID); + propertyIds.add(RootServiceComponentResourceProvider.COMPONENT_VERSION_PROPERTY_ID); // create the request Request request = PropertyHelper.getReadRequest(propertyIds); @@ -84,7 +85,8 @@ public class RootServiceComponentResourceProviderTest { Assert.assertEquals(allResponse.size(), resources.size()); for (Resource resource : resources) { String componentName = (String) resource.getPropertyValue(RootServiceComponentResourceProvider.COMPONENT_NAME_PROPERTY_ID); - Assert.assertTrue(allResponse.contains(new RootServiceComponentResponse(componentName, Collections.<String,String>emptyMap()))); + String componentVersion = (String) resource.getPropertyValue(RootServiceComponentResourceProvider.COMPONENT_VERSION_PROPERTY_ID); + Assert.assertTrue(allResponse.contains(new RootServiceComponentResponse(componentName, componentVersion, Collections.<String,String>emptyMap()))); } // get service named service4 http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/26041800/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RootServiceHostComponentResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RootServiceHostComponentResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RootServiceHostComponentResourceProviderTest.java index 3cf9a3d..baa6178 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RootServiceHostComponentResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RootServiceHostComponentResourceProviderTest.java @@ -42,7 +42,7 @@ import org.junit.Assert; import org.junit.Test; public class RootServiceHostComponentResourceProviderTest { - + @Test public void testGetResources() throws Exception{ Resource.Type type = Resource.Type.RootServiceHostComponent; @@ -50,12 +50,12 @@ public class RootServiceHostComponentResourceProviderTest { AmbariManagementController managementController = createMock(AmbariManagementController.class); Set<RootServiceHostComponentResponse> allResponse = new HashSet<RootServiceHostComponentResponse>(); - allResponse.add(new RootServiceHostComponentResponse("host1", "component1", "HEALTHY", Collections.<String,String>emptyMap())); - allResponse.add(new RootServiceHostComponentResponse("host2", "component2", "HEALTHY", Collections.<String,String>emptyMap())); - allResponse.add(new RootServiceHostComponentResponse("host3", "component3", "HEARBEAT_LOST", Collections.<String,String>emptyMap())); + allResponse.add(new RootServiceHostComponentResponse("host1", "component1", "HEALTHY", "1.1.1", Collections.<String,String>emptyMap())); + allResponse.add(new RootServiceHostComponentResponse("host2", "component2", "HEALTHY", "1.1.1", Collections.<String,String>emptyMap())); + allResponse.add(new RootServiceHostComponentResponse("host3", "component3", "HEARBEAT_LOST", "1.1.1", Collections.<String,String>emptyMap())); Set<RootServiceHostComponentResponse> nameResponse = new HashSet<RootServiceHostComponentResponse>(); - nameResponse.add(new RootServiceHostComponentResponse("host4", "component4", "HEALTHY", Collections.<String,String>emptyMap())); + nameResponse.add(new RootServiceHostComponentResponse("host4", "component4", "HEALTHY", "1.1.1", Collections.<String,String>emptyMap())); // set expectations @@ -77,6 +77,7 @@ public class RootServiceHostComponentResourceProviderTest { propertyIds.add(RootServiceHostComponentResourceProvider.COMPONENT_NAME_PROPERTY_ID); propertyIds.add(RootServiceHostComponentResourceProvider.COMPONENT_STATE_PROPERTY_ID); propertyIds.add(RootServiceHostComponentResourceProvider.PROPERTIES_PROPERTY_ID); + propertyIds.add(RootServiceHostComponentResourceProvider.COMPONENT_VERSION_PROPERTY_ID); // create the request @@ -90,7 +91,8 @@ public class RootServiceHostComponentResourceProviderTest { String hostName = (String) resource.getPropertyValue(RootServiceHostComponentResourceProvider.HOST_NAME_PROPERTY_ID); String componentName = (String) resource.getPropertyValue(RootServiceHostComponentResourceProvider.COMPONENT_NAME_PROPERTY_ID); String componentState = (String) resource.getPropertyValue(RootServiceHostComponentResourceProvider.COMPONENT_STATE_PROPERTY_ID); - Assert.assertTrue(allResponse.contains(new RootServiceHostComponentResponse(hostName, componentName, componentState, + String componentVersion = (String) resource.getPropertyValue(RootServiceHostComponentResourceProvider.COMPONENT_VERSION_PROPERTY_ID); + Assert.assertTrue(allResponse.contains(new RootServiceHostComponentResponse(hostName, componentName, componentState, componentVersion, Collections.<String, String>emptyMap()))); }
