AMBARI-22539. Cannot add host with host_name in request body
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/636a2a96 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/636a2a96 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/636a2a96 Branch: refs/heads/branch-3.0-perf Commit: 636a2a96cc19e7a588f70c9b91735af3008ed0e0 Parents: 4be18df Author: Doroszlai, Attila <adorosz...@hortonworks.com> Authored: Wed Nov 29 09:02:30 2017 +0100 Committer: Doroszlai, Attila <adorosz...@hortonworks.com> Committed: Mon Dec 11 20:14:07 2017 +0100 ---------------------------------------------------------------------- .../internal/HostResourceProvider.java | 2 +- .../internal/ScaleClusterRequest.java | 17 +-------- .../internal/ScaleClusterRequestTest.java | 38 +++++++++++++++----- 3 files changed, 31 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/636a2a96/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java index f683afd..776be0c 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java @@ -1066,7 +1066,7 @@ public class HostResourceProvider extends AbstractControllerResourceProvider { * * @return the host name for the host request */ - private String getHostNameFromProperties(Map<String, Object> properties) { + public static String getHostNameFromProperties(Map<String, Object> properties) { String hostname = (String) properties.get(HOST_HOST_NAME_PROPERTY_ID); return hostname != null ? hostname : http://git-wip-us.apache.org/repos/asf/ambari/blob/636a2a96/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ScaleClusterRequest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ScaleClusterRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ScaleClusterRequest.java index fe33f93..5e5eec8 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ScaleClusterRequest.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ScaleClusterRequest.java @@ -119,7 +119,7 @@ public class ScaleClusterRequest extends BaseClusterRequest { "Currently, a scaling request may only refer to a single blueprint"); } - String hostName = getHostNameFromProperties(properties); + String hostName = HostResourceProvider.getHostNameFromProperties(properties); boolean containsHostCount = properties.containsKey(HostResourceProvider.HOST_COUNT_PROPERTY_ID); boolean containsHostPredicate = properties.containsKey(HostResourceProvider.HOST_PREDICATE_PROPERTY_ID); @@ -212,21 +212,6 @@ public class ScaleClusterRequest extends BaseClusterRequest { } /** - * Get the host name from the request properties. - * - * @param properties request properties - * @return host name - */ - //todo: this was copied exactly from HostResourceProvider - private String getHostNameFromProperties(Map<String, Object> properties) { - String hostName = (String) properties.get(HostResourceProvider.HOST_HOST_NAME_PROPERTY_ID); - if (hostName == null) { - hostName = (String) properties.get(HostResourceProvider.HOST_NAME_PROPERTY_ID); - } - return hostName; - } - - /** * Get the total number of requested hosts for the request. * @return total requested host count */ http://git-wip-us.apache.org/repos/asf/ambari/blob/636a2a96/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ScaleClusterRequestTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ScaleClusterRequestTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ScaleClusterRequestTest.java index 2a03b1f..b9f32a0 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ScaleClusterRequestTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ScaleClusterRequestTest.java @@ -102,12 +102,17 @@ public class ScaleClusterRequestTest { @Test public void test_basic_hostName() throws Exception { + Map<String, Object> props = createScaleClusterPropertiesGroup1_HostName(CLUSTER_NAME, BLUEPRINT_NAME); + addSingleHostByName(props); + addSingleHostByName(replaceWithPlainHostNameKey(props)); + } + + private void addSingleHostByName(Map<String, Object> props) throws InvalidTopologyTemplateException { // reset default host resource provider expectations to none since no host predicate is used reset(hostResourceProvider); replay(hostResourceProvider); - ScaleClusterRequest scaleClusterRequest = new ScaleClusterRequest(Collections.singleton( - createScaleClusterPropertiesGroup1_HostName(CLUSTER_NAME, BLUEPRINT_NAME))); + ScaleClusterRequest scaleClusterRequest = new ScaleClusterRequest(Collections.singleton(props)); assertEquals(TopologyRequest.Type.SCALE, scaleClusterRequest.getType()); assertEquals(String.format("Scale Cluster '%s' (+%s hosts)", CLUSTER_NAME, "1"), @@ -129,13 +134,21 @@ public class ScaleClusterRequestTest { @Test public void testMultipleHostNames() throws Exception { - // reset default host resource provider expectations to none since no host predicate is used - reset(hostResourceProvider); - replay(hostResourceProvider); - Set<Map<String, Object>> propertySet = new HashSet<>(); propertySet.add(createScaleClusterPropertiesGroup1_HostName(CLUSTER_NAME, BLUEPRINT_NAME)); propertySet.add(createScaleClusterPropertiesGroup1_HostName2(CLUSTER_NAME, BLUEPRINT_NAME)); + addMultipleHostsByName(propertySet); + + for (Map<String, Object> props : propertySet) { + replaceWithPlainHostNameKey(props); + } + addMultipleHostsByName(propertySet); + } + + private void addMultipleHostsByName(Set<Map<String, Object>> propertySet) throws InvalidTopologyTemplateException { + // reset default host resource provider expectations to none since no host predicate is used + reset(hostResourceProvider); + replay(hostResourceProvider); ScaleClusterRequest scaleClusterRequest = new ScaleClusterRequest(propertySet); @@ -294,7 +307,7 @@ public class ScaleClusterRequestTest { public void test_NoHostNameOrHostCount() throws Exception { Map<String, Object> properties = createScaleClusterPropertiesGroup1_HostName(CLUSTER_NAME, BLUEPRINT_NAME); // remove host name - properties.remove("host_name"); + properties.remove(HostResourceProvider.HOST_HOST_NAME_PROPERTY_ID); // reset default host resource provider expectations to none reset(hostResourceProvider); @@ -336,8 +349,15 @@ public class ScaleClusterRequestTest { properties.put(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID, clusterName); properties.put(HostResourceProvider.BLUEPRINT_PROPERTY_ID, blueprintName); properties.put(HostResourceProvider.HOST_GROUP_PROPERTY_ID, GROUP1_NAME); - properties.put(HostResourceProvider.HOST_NAME_PROPERTY_ID, HOST1_NAME); + properties.put(HostResourceProvider.HOST_HOST_NAME_PROPERTY_ID, HOST1_NAME); + + return properties; + } + // include host name under "host_name" key instead of "Hosts/host_name" + private static Map<String, Object> replaceWithPlainHostNameKey(Map<String, Object> properties) { + Object value = properties.remove(HostResourceProvider.HOST_HOST_NAME_PROPERTY_ID); + properties.put(HostResourceProvider.HOST_NAME_PROPERTY_ID, value); return properties; } @@ -381,7 +401,7 @@ public class ScaleClusterRequestTest { properties.put(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID, clusterName); properties.put(HostResourceProvider.BLUEPRINT_PROPERTY_ID, blueprintName); properties.put(HostResourceProvider.HOST_GROUP_PROPERTY_ID, GROUP1_NAME); - properties.put(HostResourceProvider.HOST_NAME_PROPERTY_ID, HOST2_NAME); + properties.put(HostResourceProvider.HOST_HOST_NAME_PROPERTY_ID, HOST2_NAME); return properties; }