ambari git commit: AMBARI-12366. Fix issue where the BP configuration is modified on a getter invocation due to an incomplete deep copy

2015-07-09 Thread jspeidel
Repository: ambari
Updated Branches:
  refs/heads/branch-2.1 a27ad20b1 -> 719d16cd5


AMBARI-12366.  Fix issue where the BP configuration is modified on a getter 
invocation
   due to an incomplete deep copy


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

Branch: refs/heads/branch-2.1
Commit: 719d16cd5d3db25c22d86389e73a82958a5a
Parents: a27ad20
Author: John Speidel 
Authored: Thu Jul 9 17:45:13 2015 -0400
Committer: John Speidel 
Committed: Thu Jul 9 19:11:36 2015 -0400

--
 .../ambari/server/topology/Configuration.java   | 12 +--
 .../server/topology/ConfigurationTest.java  | 37 +++-
 2 files changed, 21 insertions(+), 28 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/ambari/blob/719d16cd/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 91b7736..108ff74 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
@@ -115,7 +115,11 @@ public class Configuration {
*/
   public Map> getFullProperties(int depthLimit) {
 if (depthLimit == 0) {
-  return new HashMap>(properties);
+  HashMap> propertiesCopy = new 
HashMap>();
+  for (Map.Entry> typeProperties : 
properties.entrySet()) {
+propertiesCopy.put(typeProperties.getKey(), new HashMap(typeProperties.getValue()));
+  }
+  return propertiesCopy;
 }
 
 Map> mergedProperties = parentConfiguration == 
null ?
@@ -159,8 +163,10 @@ public class Configuration {
 
 for (Map.Entry>> typeEntry : 
attributes.entrySet()) {
   String type = typeEntry.getKey();
-  Map> typeAttributes =
-  new HashMap>(typeEntry.getValue());
+  Map> typeAttributes = new HashMap>();
+  for (Map.Entry> attributeEntry : 
typeEntry.getValue().entrySet()) {
+typeAttributes.put(attributeEntry.getKey(), new HashMap(attributeEntry.getValue()));
+  }
 
   if (! mergedAttributeMap.containsKey(type)) {
 mergedAttributeMap.put(type, typeAttributes);

http://git-wip-us.apache.org/repos/asf/ambari/blob/719d16cd/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigurationTest.java
--
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigurationTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigurationTest.java
index 9bab88f..e971e03 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigurationTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigurationTest.java
@@ -106,12 +106,6 @@ public class ConfigurationTest {
   @Test
   public void testGetFullProperties_withParent() {
 Configuration configuration = createConfigurationWithParents_PropsOnly();
-// get prop maps prior to calling getFullProperties
-Map> leafProperties = 
configuration.getProperties();
-Map> parentProperties = 
configuration.getParentConfiguration().getProperties();
-Map> parentParentProperties = 
configuration.getParentConfiguration().getParentConfiguration().getProperties();
-
-// test
 // all parents should be reflected in getFullProperties() result
 Map> fullProperties = 
configuration.getFullProperties();
 
@@ -145,9 +139,10 @@ public class ConfigurationTest {
 assertEquals("val11.3", type4Props.get("prop11"));
 
 // ensure that underlying property map is not modified in getFullProperties
-assertEquals(leafProperties, configuration.getProperties());
-assertEquals(parentProperties, 
configuration.getParentConfiguration().getProperties());
-assertEquals(parentParentProperties, 
configuration.getParentConfiguration().getParentConfiguration().getProperties());
+Configuration expectedConfiguration = 
createConfigurationWithParents_PropsOnly();
+assertEquals(expectedConfiguration.getProperties(), 
configuration.getProperties());
+
assertEquals(expectedConfiguration.getParentConfiguration().getProperties(), 
configuration.getParentConfiguration().getProperties());
+
assertEquals(expectedConfiguration.getParentConfiguration().getParentConfiguration().getProperties(),
 
configuration.getParentConfiguration().getParentConfiguration().getProperties());
 
 assertEquals(EMPTY_ATTR

ambari git commit: AMBARI-12366. Fix issue where the BP configuration is modified on a getter invocation due to an incomplete deep copy

2015-07-09 Thread jspeidel
Repository: ambari
Updated Branches:
  refs/heads/trunk 630299fb3 -> ba21f8988


AMBARI-12366.  Fix issue where the BP configuration is modified on a getter 
invocation
   due to an incomplete deep copy


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

Branch: refs/heads/trunk
Commit: ba21f89881d80de8be1256336fa6f655db02fd54
Parents: 630299f
Author: John Speidel 
Authored: Thu Jul 9 17:45:13 2015 -0400
Committer: John Speidel 
Committed: Thu Jul 9 19:06:45 2015 -0400

--
 .../ambari/server/topology/Configuration.java   | 12 +--
 .../server/topology/ConfigurationTest.java  | 37 +++-
 2 files changed, 21 insertions(+), 28 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/ambari/blob/ba21f898/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 91b7736..108ff74 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
@@ -115,7 +115,11 @@ public class Configuration {
*/
   public Map> getFullProperties(int depthLimit) {
 if (depthLimit == 0) {
-  return new HashMap>(properties);
+  HashMap> propertiesCopy = new 
HashMap>();
+  for (Map.Entry> typeProperties : 
properties.entrySet()) {
+propertiesCopy.put(typeProperties.getKey(), new HashMap(typeProperties.getValue()));
+  }
+  return propertiesCopy;
 }
 
 Map> mergedProperties = parentConfiguration == 
null ?
@@ -159,8 +163,10 @@ public class Configuration {
 
 for (Map.Entry>> typeEntry : 
attributes.entrySet()) {
   String type = typeEntry.getKey();
-  Map> typeAttributes =
-  new HashMap>(typeEntry.getValue());
+  Map> typeAttributes = new HashMap>();
+  for (Map.Entry> attributeEntry : 
typeEntry.getValue().entrySet()) {
+typeAttributes.put(attributeEntry.getKey(), new HashMap(attributeEntry.getValue()));
+  }
 
   if (! mergedAttributeMap.containsKey(type)) {
 mergedAttributeMap.put(type, typeAttributes);

http://git-wip-us.apache.org/repos/asf/ambari/blob/ba21f898/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigurationTest.java
--
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigurationTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigurationTest.java
index 9bab88f..e971e03 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigurationTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/topology/ConfigurationTest.java
@@ -106,12 +106,6 @@ public class ConfigurationTest {
   @Test
   public void testGetFullProperties_withParent() {
 Configuration configuration = createConfigurationWithParents_PropsOnly();
-// get prop maps prior to calling getFullProperties
-Map> leafProperties = 
configuration.getProperties();
-Map> parentProperties = 
configuration.getParentConfiguration().getProperties();
-Map> parentParentProperties = 
configuration.getParentConfiguration().getParentConfiguration().getProperties();
-
-// test
 // all parents should be reflected in getFullProperties() result
 Map> fullProperties = 
configuration.getFullProperties();
 
@@ -145,9 +139,10 @@ public class ConfigurationTest {
 assertEquals("val11.3", type4Props.get("prop11"));
 
 // ensure that underlying property map is not modified in getFullProperties
-assertEquals(leafProperties, configuration.getProperties());
-assertEquals(parentProperties, 
configuration.getParentConfiguration().getProperties());
-assertEquals(parentParentProperties, 
configuration.getParentConfiguration().getParentConfiguration().getProperties());
+Configuration expectedConfiguration = 
createConfigurationWithParents_PropsOnly();
+assertEquals(expectedConfiguration.getProperties(), 
configuration.getProperties());
+
assertEquals(expectedConfiguration.getParentConfiguration().getProperties(), 
configuration.getParentConfiguration().getProperties());
+
assertEquals(expectedConfiguration.getParentConfiguration().getParentConfiguration().getProperties(),
 
configuration.getParentConfiguration().getParentConfiguration().getProperties());
 
 assertEquals(EMPTY_ATTRIBUTES, co