Repository: ambari
Updated Branches:
  refs/heads/branch-1.7.0 fe60f057e -> c1e024521


AMBARI-7835.  Blueprint export now properly handles configurations with no 
properties.


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

Branch: refs/heads/branch-1.7.0
Commit: c1e02452164f4e1faef76943d5fe115a0eac0131
Parents: fe60f05
Author: Robert Nettleton <rnettle...@hortonworks.com>
Authored: Tue Oct 21 10:44:19 2014 -0400
Committer: John Speidel <jspei...@hortonworks.com>
Committed: Tue Oct 21 11:16:41 2014 -0400

----------------------------------------------------------------------
 .../query/render/ClusterBlueprintRenderer.java  | 15 ++++-
 .../render/ClusterBlueprintRendererTest.java    | 65 ++++++++++++++++++--
 2 files changed, 75 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c1e02452/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRenderer.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRenderer.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRenderer.java
index 1afae39..847735d 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRenderer.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRenderer.java
@@ -37,6 +37,8 @@ import 
org.apache.ambari.server.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.state.DesiredConfig;
 import org.apache.ambari.server.state.HostConfig;
 import org.apache.ambari.server.state.PropertyInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
@@ -66,6 +68,8 @@ public class ClusterBlueprintRenderer extends BaseRenderer 
implements Renderer {
    */
   private Map<String, Collection<String>> propertiesToStrip = new 
HashMap<String, Collection<String>>();
 
+  private final static Logger LOG = 
LoggerFactory.getLogger(ClusterBlueprintRenderer.class);
+
 
   // ----- Renderer ----------------------------------------------------------
 
@@ -538,7 +542,16 @@ public class ClusterBlueprintRenderer extends BaseRenderer 
implements Renderer {
 
       // property map type is currently <String, Object>
       properties = (Map) 
configNode.getObject().getPropertiesMap().get("properties");
-      stripRequiredProperties(properties);
+
+      if (properties != null) {
+        stripRequiredProperties(properties);
+      } else {
+        LOG.warn("Empty configuration found for configuration type = " + type +
+          " during Blueprint export.  This may occur after an upgrade of 
Ambari, when" +
+          "attempting to export a Blueprint from a cluster started by an older 
version of " +
+          "Ambari.");
+      }
+
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/c1e02452/ambari-server/src/test/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRendererTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRendererTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRendererTest.java
index 04d86ad..6e58267 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRendererTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRendererTest.java
@@ -31,7 +31,6 @@ import 
org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.internal.ResourceImpl;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.state.PropertyInfo;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import java.net.InetAddress;
@@ -99,7 +98,6 @@ public class ClusterBlueprintRendererTest {
     
assertTrue(propertyTree.getChild("Host/HostComponent").getObject().contains("HostRoles/component_name"));
   }
 
-  @Ignore
   @Test
   public void testFinalizeResult() throws Exception{
 
@@ -124,7 +122,6 @@ public class ClusterBlueprintRendererTest {
     Resource blueprintResource = blueprintNode.getObject();
     Map<String, Map<String, Object>> properties = 
blueprintResource.getPropertiesMap();
 
-    assertEquals("blueprint-testCluster", 
properties.get("Blueprints").get("blueprint_name"));
     assertEquals("HDP", properties.get("Blueprints").get("stack_name"));
     assertEquals("1.3.3", properties.get("Blueprints").get("stack_version"));
 
@@ -176,11 +173,71 @@ public class ClusterBlueprintRendererTest {
   //todo: collection resource
 
   private void createClusterResultTree(TreeNode<Resource> resultTree) throws 
Exception{
-    Resource clusterResource = new ResourceImpl(Resource.Type.Cluster);
+    Resource clusterResource = new ResourceImpl(Resource.Type.Cluster) {
+      @Override
+      public Map<String, Map<String, Object>> getPropertiesMap() {
+        Map<String, Map<String, Object>> originalMap =
+          super.getPropertiesMap();
+
+        // override the properties map for simpler testing
+        originalMap.put("Clusters/desired_configs", Collections.<String, 
Object>emptyMap());
+
+        return originalMap;
+      };
+
+    };
+
     clusterResource.setProperty("Clusters/cluster_name", "testCluster");
     clusterResource.setProperty("Clusters/version", "HDP-1.3.3");
+
     TreeNode<Resource> clusterTree = resultTree.addChild(clusterResource, 
"Cluster:1");
 
+    // add empty services resource for basic unit testing
+    Resource servicesResource = new ResourceImpl(Resource.Type.Service);
+    clusterTree.addChild(servicesResource, "services");
+
+
+    Resource configurationsResource = new 
ResourceImpl(Resource.Type.Configuration);
+    TreeNode<Resource> configurations = 
clusterTree.addChild(configurationsResource, "configurations");
+    Resource resourceOne = new ResourceImpl(Resource.Type.Configuration) {
+      @Override
+      public Map<String, Map<String, Object>> getPropertiesMap() {
+        Map<String, Map<String, Object>> originalMap =
+        super.getPropertiesMap();
+
+        // return null for properties, to simulate upgrade case
+        originalMap.put("properties", null);
+
+        return originalMap;
+      }
+    };
+
+    resourceOne.setProperty("type", "mapreduce-log4j");
+
+    configurations.addChild(resourceOne, "resourceOne");
+
+
+    Resource resourceTwo = new ResourceImpl(Resource.Type.Configuration) {
+      @Override
+      public Map<String, Map<String, Object>> getPropertiesMap() {
+        Map<String, Map<String, Object>> originalMap =
+          super.getPropertiesMap();
+
+        // return test properties, to simluate valid configuration entry
+        originalMap.put("properties", Collections.<String, 
Object>singletonMap("propertyOne", "valueOne"));
+
+        return originalMap;
+      }
+    };
+
+    resourceTwo.setProperty("type", "test-type-one");
+
+    configurations.addChild(resourceTwo, "resourceTwo");
+
+    Resource blueprintOne = new ResourceImpl(Resource.Type.Blueprint);
+    blueprintOne.setProperty("Blueprints/blueprint_name", 
"blueprint-testCluster");
+    clusterTree.addChild(blueprintOne, "Blueprints");
+
     TreeNode<Resource> hostsTree = clusterTree.addChild(null, "hosts");
     hostsTree.setProperty("isCollection", "true");
 

Reply via email to