Repository: ambari
Updated Branches:
  refs/heads/trunk 862336189 -> f8fe788a2


AMBARI-14723. NPE when provisioning cluster with a Cluster template which 
doesn't contain all hostgroups defined in Blueprint. (Sandor Magyari via 
rnettleton)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f8fe788a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f8fe788a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f8fe788a

Branch: refs/heads/trunk
Commit: f8fe788a2d208acff4a88fc5a1a17549cfe16100
Parents: 8623361
Author: Bob Nettleton <rnettle...@hortonworks.com>
Authored: Wed Jan 20 13:33:03 2016 -0500
Committer: Bob Nettleton <rnettle...@hortonworks.com>
Committed: Wed Jan 20 13:33:18 2016 -0500

----------------------------------------------------------------------
 .../server/topology/ClusterTopologyImpl.java    |  7 ++++-
 .../topology/ClusterTopologyImplTest.java       | 28 +++++++++++++++++++-
 2 files changed, 33 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f8fe788a/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java
index 91965f1..05dc504 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java
@@ -173,7 +173,12 @@ public class ClusterTopologyImpl implements 
ClusterTopology {
     Collection<String> hosts = new ArrayList<String>();
     Collection<String> hostGroups = getHostGroupsForComponent(component);
     for (String group : hostGroups) {
-      hosts.addAll(getHostGroupInfo().get(group).getHostNames());
+      HostGroupInfo hostGroupInfo = getHostGroupInfo().get(group);
+      if (hostGroupInfo != null) {
+        hosts.addAll(hostGroupInfo.getHostNames());
+      } else {
+        LOG.warn("HostGroup {} not found, when checking for hosts for 
component {}", group, component);
+      }
     }
     return hosts;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f8fe788a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterTopologyImplTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterTopologyImplTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterTopologyImplTest.java
index 7c68482..95e58ae 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterTopologyImplTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterTopologyImplTest.java
@@ -24,6 +24,7 @@ import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -101,6 +102,11 @@ public class ClusterTopologyImplTest {
     Set<Component> group1Components = new HashSet<Component>();
     group1Components.add(new Component("component1"));
     group1Components.add(new Component("component2"));
+
+    Set<String> group1ComponentNames = new HashSet<String>();
+    group1ComponentNames.add("component1");
+    group1ComponentNames.add("component2");
+
     Set<Component> group2Components = new HashSet<Component>();
     group2Components.add(new Component("component3"));
     Set<Component> group3Components = new HashSet<Component>();
@@ -123,6 +129,11 @@ public class ClusterTopologyImplTest {
     expect(group2.getComponents()).andReturn(group2Components).anyTimes();
     expect(group3.getComponents()).andReturn(group3Components).anyTimes();
     expect(group4.getComponents()).andReturn(group4Components).anyTimes();
+
+    
expect(group1.getComponentNames()).andReturn(group1ComponentNames).anyTimes();
+    
expect(group2.getComponentNames()).andReturn(Collections.singletonList("component3")).anyTimes();
+    
expect(group3.getComponentNames()).andReturn(Collections.singletonList("component4")).anyTimes();
+    
expect(group4.getComponentNames()).andReturn(Collections.singletonList("component5")).anyTimes();
   }
 
   @After
@@ -156,7 +167,7 @@ public class ClusterTopologyImplTest {
   }
 
   @Test
-  public void testCreate_validatorSuccess() throws Exception {
+     public void testCreate_validatorSuccess() throws Exception {
     TestTopologyRequest request = new 
TestTopologyRequest(TopologyRequest.Type.PROVISION);
 
     TopologyValidator validator = createStrictMock(TopologyValidator.class);
@@ -182,6 +193,21 @@ public class ClusterTopologyImplTest {
     new ClusterTopologyImpl(null, request);
   }
 
+  @Test
+  public void test_GetHostAssigmentForComponents() throws Exception {
+    TestTopologyRequest request = new 
TestTopologyRequest(TopologyRequest.Type.PROVISION);
+
+    TopologyValidator validator = createStrictMock(TopologyValidator.class);
+    topologyValidators.add(validator);
+
+    validator.validate((ClusterTopology) notNull());
+
+    replayAll();
+    replay(validator);
+
+    new ClusterTopologyImpl(null, 
request).getHostAssignmentsForComponent("component1");
+  }
+
   private class TestTopologyRequest implements TopologyRequest {
     private Type type;
 

Reply via email to