ambari git commit: AMBARI-12366. Fix issue where the BP configuration is modified on a getter invocation due to an incomplete deep copy
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
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