You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ad...@apache.org on 2017/11/20 10:17:35 UTC

[1/2] ambari git commit: AMBARI-22297. Fix configurations import/export issues (adoroszlai)

Repository: ambari
Updated Branches:
  refs/heads/branch-feature-AMBARI-14714-blueprintv2 76dbc760a -> 94a93a6bb


AMBARI-22297. Fix configurations import/export issues (adoroszlai)


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

Branch: refs/heads/branch-feature-AMBARI-14714-blueprintv2
Commit: 365980b5a4bc233de09c3563450ce6826ac06231
Parents: 76dbc76
Author: Attila Doroszlai <ad...@hortonworks.com>
Authored: Mon Nov 20 08:43:46 2017 +0100
Committer: Attila Doroszlai <ad...@hortonworks.com>
Committed: Mon Nov 20 08:43:52 2017 +0100

----------------------------------------------------------------------
 .../ambari/server/topology/Configurable.java    | 24 +++++++-----
 .../ambari/server/topology/Configuration.java   |  4 ++
 .../server/topology/BlueprintV2FactoryTest.java | 40 ++++++++++++--------
 .../test/resources/blueprintv2/blueprintv2.json | 24 ++++++++----
 4 files changed, 58 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/365980b5/ambari-server/src/main/java/org/apache/ambari/server/topology/Configurable.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/Configurable.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/Configurable.java
index bab7da6..af91e40 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/Configurable.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/Configurable.java
@@ -18,13 +18,16 @@
 
 package org.apache.ambari.server.topology;
 
+import static java.util.Collections.singletonMap;
+import static java.util.stream.Collectors.toList;
+import static java.util.stream.Collectors.toMap;
+
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.google.common.collect.Lists;
 
 public interface Configurable {
   void setConfiguration(Configuration configuration);
@@ -34,10 +37,10 @@ public interface Configurable {
   default void setConfigs(Collection<Map<String, Map<String, Map<String, String>>>> configs) {
     if (null != configs) {
       Map<String, Map<String, String>> allProps = configs.stream().
-        filter( map -> map != null && !map.isEmpty() && map.values().iterator().next().get("properties ") != null).
-        collect(Collectors.toMap(
+        filter(map -> map != null && !map.isEmpty() && map.values().iterator().next().get(Configuration.PROPERTIES_KEY) != null).
+        collect(toMap(
           config -> config.keySet().iterator().next(),
-          config -> config.values().iterator().next().get("properties")
+          config -> config.values().iterator().next().get(Configuration.PROPERTIES_KEY)
         ));
       setConfiguration(new Configuration(allProps, new HashMap<>()));
     }
@@ -45,11 +48,12 @@ public interface Configurable {
 
   @JsonProperty("configurations")
   default Collection<Map<String, Map<String, Map<String, String>>>> getConfigs() {
-    Map<String, Map<String, Map<String, String>>> configAsMap = new HashMap<>();
-    if (null != getConfiguration()) {
-      configAsMap.put("properties", getConfiguration().getProperties());
-    }
-    return Lists.newArrayList(configAsMap); // TODO replace with Collections.singletonList?
+    Configuration config = getConfiguration();
+    return config != null
+      ? config.getProperties().entrySet().stream()
+        .map(e -> singletonMap(e.getKey(), singletonMap(Configuration.PROPERTIES_KEY, e.getValue())))
+        .collect(toList())
+      : Collections.emptyList();
   }
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/365980b5/ambari-server/src/main/java/org/apache/ambari/server/topology/Configuration.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/Configuration.java
index 6adcf18..123237f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/Configuration.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/Configuration.java
@@ -30,6 +30,10 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
  * Configuration for a topology entity such as a blueprint, hostgroup or cluster.
  */
 public class Configuration {
+
+  public static final String PROPERTIES_KEY = "properties";
+  public static final String ATTRIBUTES_KEY = "properties_attributes";
+
   /**
    * properties for this configuration instance
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/365980b5/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintV2FactoryTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintV2FactoryTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintV2FactoryTest.java
index 6ae8039..78aa98c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintV2FactoryTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintV2FactoryTest.java
@@ -17,7 +17,6 @@
  */
 package org.apache.ambari.server.topology;
 
-import static org.easymock.EasyMock.anyString;
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
@@ -56,7 +55,7 @@ public class BlueprintV2FactoryTest {
   @Before
   public void setUp() throws Exception {
     StackV2Factory stackFactory = mock(StackV2Factory.class);
-    when(stackFactory.create(any(StackId.class), anyString())).thenAnswer(invocation -> {
+    when(stackFactory.create(any(StackId.class), any(String.class))).thenAnswer(invocation -> {
       StackId stackId = invocation.getArgumentAt(0, StackId.class);
       return new StackV2(stackId.getStackName(), stackId.getStackVersion(), invocation.getArgumentAt(1, String.class),
         new HashMap<>(), new HashMap<>(), new HashMap<>(),
@@ -69,12 +68,26 @@ public class BlueprintV2FactoryTest {
 
   @Test
   public void testSerialization_parseJsonAsBlueprint() throws Exception {
-    BlueprintV2 bp = blueprintFactory.convertFromJson(BLUEPRINTV2_JSON);
+    verifyBlueprintStructure1(blueprintFactory.convertFromJson(BLUEPRINTV2_JSON));
+  }
+
+  private void verifyBlueprintStructure1(BlueprintV2 bp) { // for "blueprintv2.json"
     assertEquals(new StackId("HDPCORE", "3.0.0"),
       bp.getServiceGroups().iterator().next().getServices().iterator().next().getStack().getStackId());
     assertEquals(2, bp.getStackIds().size());
     assertEquals(7, bp.getAllServiceIds().size());
     assertEquals(2, bp.getServiceGroups().size());
+
+    Service zk1 = bp.getServiceGroup("CoreSG").getServiceByName("ZK1");
+    Map<String, Map<String, String>> expectedProperties = new HashMap<>();
+    Map<String, String> zooCfg = new HashMap<>();
+    zooCfg.put("dataDir", "/zookeeper1");
+    expectedProperties.put("zoo.cfg", zooCfg);
+    Map<String, String> zookeeperEnv = new HashMap<>();
+    zookeeperEnv.put("zk_user", "zkuser1");
+    zookeeperEnv.put("zk_server_heapsize", "256MB");
+    expectedProperties.put("zookeeper-env", zookeeperEnv);
+    assertEquals(expectedProperties, zk1.getConfiguration().getProperties());
   }
 
   @Test
@@ -92,23 +105,22 @@ public class BlueprintV2FactoryTest {
     assertEquals(1, getAsList(blueprintAsMap, "host_groups").size());
     assertEquals("host_group_1", getByPath(blueprintAsMap,
       ImmutableList.of("host_groups", 0, "name")));
-    System.out.println(blueprintAsMap);
   }
 
   @Test
   public void testSerialization_serializeBlueprint() throws Exception {
-    BlueprintV2 bp = blueprintFactory.convertFromJson(BLUEPRINTV2_JSON);
-    String serialized = blueprintFactory.convertToJson(bp);
+    BlueprintV2 bp1 = blueprintFactory.convertFromJson(BLUEPRINTV2_JSON);
+    String serialized = blueprintFactory.convertToJson(bp1);
     // Test that serialized blueprint can be read again
-    bp = blueprintFactory.convertFromJson(serialized);
-    assertEquals(2, bp.getStackIds().size());
-    assertEquals(7, bp.getAllServiceIds().size());
-    assertEquals(2, bp.getServiceGroups().size());
+    verifyBlueprintStructure1(blueprintFactory.convertFromJson(serialized));
   }
 
   @Test
   public void testSerialization2_parseJsonAsBlueprint() throws Exception {
-    BlueprintV2 bp = blueprintFactory.convertFromJson(BLUEPRINTV2_2_JSON);
+    verifyBlueprintStructure2(blueprintFactory.convertFromJson(BLUEPRINTV2_2_JSON));
+  }
+
+  private void verifyBlueprintStructure2(BlueprintV2 bp) {
     assertEquals(new StackId("HDP", "3.0.0"),
       bp.getServiceGroups().iterator().next().getServices().iterator().next().getStack().getStackId());
     assertEquals(1, bp.getStackIds().size());
@@ -131,7 +143,6 @@ public class BlueprintV2FactoryTest {
     assertEquals(1, getAsList(blueprintAsMap, "host_groups").size());
     assertEquals("host_group_1", getByPath(blueprintAsMap,
       ImmutableList.of("host_groups", 0, "name")));
-    System.out.println(blueprintAsMap);
   }
 
   @Test
@@ -139,10 +150,7 @@ public class BlueprintV2FactoryTest {
     BlueprintV2 bp = blueprintFactory.convertFromJson(BLUEPRINTV2_2_JSON);
     String serialized = blueprintFactory.convertToJson(bp);
     // Test that serialized blueprint can be read again
-    bp = blueprintFactory.convertFromJson(serialized);
-    assertEquals(1, bp.getStackIds().size());
-    assertEquals(4, bp.getAllServiceIds().size());
-    assertEquals(1, bp.getServiceGroups().size());
+    verifyBlueprintStructure2(blueprintFactory.convertFromJson(serialized));
   }
 
   private static Map<String, Object> getAsMap(Map<String, Object> parentMap, String key) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/365980b5/ambari-server/src/test/resources/blueprintv2/blueprintv2.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/blueprintv2/blueprintv2.json b/ambari-server/src/test/resources/blueprintv2/blueprintv2.json
index c5e2541..013b8d7 100644
--- a/ambari-server/src/test/resources/blueprintv2/blueprintv2.json
+++ b/ambari-server/src/test/resources/blueprintv2/blueprintv2.json
@@ -34,9 +34,17 @@
           "stack_id": "HDPCORE-3.0.0",
           "configurations": [
             {
-              "zoo.cfg" : {
-                "properties" : {
-                  "dataDir" : "/zookeeper1"
+              "zoo.cfg": {
+                "properties": {
+                  "dataDir": "/zookeeper1"
+                }
+              }
+            },
+            {
+              "zookeeper-env": {
+                "properties": {
+                  "zk_user": "zkuser1",
+                  "zk_server_heapsize": "256MB"
                 }
               }
             }
@@ -48,9 +56,9 @@
           "stack_id": "HDPCORE-3.0.0",
           "configurations": [
             {
-              "zoo.cfg" : {
-                "properties" : {
-                  "dataDir" : "/zookeeper2"
+              "zoo.cfg": {
+                "properties": {
+                  "dataDir": "/zookeeper2"
                 }
               }
             }
@@ -78,8 +86,8 @@
           "stack_id": "HDPCORE-3.0.0",
           "dependencies": [
             {
-              "service_group" : "CoreSG",
-              "service_name" : "ZK2"
+              "service_group": "CoreSG",
+              "service_name": "ZK2"
             }
           ]
         },


[2/2] ambari git commit: AMBARI-22297. Initialize blueprint with default values to avoid NPE (adoroszlai)

Posted by ad...@apache.org.
AMBARI-22297. Initialize blueprint with default values to avoid NPE (adoroszlai)


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

Branch: refs/heads/branch-feature-AMBARI-14714-blueprintv2
Commit: 94a93a6bbe7495f7ed133fbd8df597609ac34fa7
Parents: 365980b
Author: Attila Doroszlai <ad...@hortonworks.com>
Authored: Mon Nov 20 08:55:08 2017 +0100
Committer: Attila Doroszlai <ad...@hortonworks.com>
Committed: Mon Nov 20 10:19:15 2017 +0100

----------------------------------------------------------------------
 .../ambari/server/topology/BlueprintV2Impl.java       | 14 +++++++-------
 .../apache/ambari/server/topology/Configuration.java  |  4 ++++
 .../ambari/server/topology/SecurityConfiguration.java |  2 ++
 .../org/apache/ambari/server/topology/Service.java    |  2 +-
 4 files changed, 14 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/94a93a6b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Impl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Impl.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Impl.java
index 26bdfe2..66ca85d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Impl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Impl.java
@@ -23,8 +23,8 @@ import static java.util.stream.Collectors.toList;
 import static java.util.stream.Collectors.toMap;
 import static java.util.stream.Collectors.toSet;
 
-import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -48,11 +48,11 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 public class BlueprintV2Impl implements BlueprintV2 {
 
   private String name;
-  private SecurityConfiguration securityConfiguration;
-  private Collection<RepositoryVersion> repositoryVersions = new ArrayList<>(0);
-  private Map<String, ServiceGroup> serviceGroups;
-  private Setting setting;
-  private final Configuration configuration = new Configuration(new HashMap<>(), new HashMap<>());
+  private SecurityConfiguration securityConfiguration = SecurityConfiguration.NONE;
+  private Collection<RepositoryVersion> repositoryVersions = Collections.emptyList();
+  private Map<String, ServiceGroup> serviceGroups = Collections.emptyMap();
+  private Setting setting = new Setting(Collections.emptyMap());
+  private final Configuration configuration = Configuration.createEmpty();
 
   // Transient fields
   @JsonIgnore
@@ -410,7 +410,7 @@ public class BlueprintV2Impl implements BlueprintV2 {
     @JsonProperty("blueprint_name")
     public String name;
     @JsonProperty("security")
-    public SecurityConfiguration securityConfiguration;
+    public SecurityConfiguration securityConfiguration = SecurityConfiguration.NONE;
 
     public Blueprints() { }
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/94a93a6b/ambari-server/src/main/java/org/apache/ambari/server/topology/Configuration.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/Configuration.java
index 123237f..27b9247 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/Configuration.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/Configuration.java
@@ -49,6 +49,10 @@ public class Configuration {
    */
   private Configuration parentConfiguration;
 
+  public static Configuration createEmpty() {
+    return new Configuration(new HashMap<>(0), new HashMap<>(0));
+  }
+
   public Configuration(Configuration config, Configuration parent) {
     this(config.getProperties(), config.getAttributes(), parent);
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/94a93a6b/ambari-server/src/main/java/org/apache/ambari/server/topology/SecurityConfiguration.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/SecurityConfiguration.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/SecurityConfiguration.java
index 7955169..7a8b8a9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/SecurityConfiguration.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/SecurityConfiguration.java
@@ -31,6 +31,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
  */
 public class SecurityConfiguration {
 
+  public static final SecurityConfiguration NONE = new SecurityConfiguration(SecurityType.NONE);
+
   /**
    * Security Type
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/94a93a6b/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java
index e80396f..4a93ecd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java
@@ -41,7 +41,7 @@ public class Service implements Configurable {
   private String stackId;
 
   @JsonIgnore
-  private Configuration configuration;
+  private Configuration configuration = Configuration.createEmpty();
 
   private Set<ServiceId> dependencies = ImmutableSet.of();