HADOOP-6964. Allow compact property description in xml (Kengo Seki via aw)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/f9a837ca Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/f9a837ca Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/f9a837ca Branch: refs/heads/HDFS-EC Commit: f9a837ca6a6bb9c2d73d7f126881358e81756a7f Parents: ee9c025 Author: Allen Wittenauer <[email protected]> Authored: Thu Feb 5 19:09:37 2015 -0800 Committer: Zhe Zhang <[email protected]> Committed: Fri Feb 6 13:45:51 2015 -0800 ---------------------------------------------------------------------- hadoop-common-project/hadoop-common/CHANGES.txt | 3 ++ .../org/apache/hadoop/conf/Configuration.java | 18 ++++++- .../apache/hadoop/conf/TestConfiguration.java | 55 ++++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/f9a837ca/hadoop-common-project/hadoop-common/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index aee3a23..b323f32 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -160,6 +160,9 @@ Trunk (Unreleased) HADOOP-7713. dfs -count -q should label output column (Jonathan Allen via aw) + HADOOP-6964. Allow compact property description in xml (Kengo Seki + via aw) + BUG FIXES HADOOP-11473. test-patch says "-1 overall" even when all checks are +1 http://git-wip-us.apache.org/repos/asf/hadoop/blob/f9a837ca/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java index 54ee46d..8f98d0a 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java @@ -90,6 +90,7 @@ import org.apache.hadoop.util.StringInterner; import org.apache.hadoop.util.StringUtils; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonGenerator; +import org.w3c.dom.Attr; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -2514,11 +2515,26 @@ public class Configuration implements Iterable<Map.Entry<String,String>>, } if (!"property".equals(prop.getTagName())) LOG.warn("bad conf file: element not <property>"); - NodeList fields = prop.getChildNodes(); + String attr = null; String value = null; boolean finalParameter = false; LinkedList<String> source = new LinkedList<String>(); + + Attr propAttr = prop.getAttributeNode("name"); + if (propAttr != null) + attr = StringInterner.weakIntern(propAttr.getValue()); + propAttr = prop.getAttributeNode("value"); + if (propAttr != null) + value = StringInterner.weakIntern(propAttr.getValue()); + propAttr = prop.getAttributeNode("final"); + if (propAttr != null) + finalParameter = "true".equals(propAttr.getValue()); + propAttr = prop.getAttributeNode("source"); + if (propAttr != null) + source.add(StringInterner.weakIntern(propAttr.getValue())); + + NodeList fields = prop.getChildNodes(); for (int j = 0; j < fields.getLength(); j++) { Node fieldNode = fields.item(j); if (!(fieldNode instanceof Element)) http://git-wip-us.apache.org/repos/asf/hadoop/blob/f9a837ca/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java index 55bcdc6..7b4fbb5 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java @@ -209,6 +209,31 @@ public class TestConfiguration extends TestCase { assertNull("my var is not final", conf2.get("my.var")); } + public void testCompactFormat() throws IOException { + out=new BufferedWriter(new FileWriter(CONFIG)); + startConfig(); + appendCompactFormatProperty("a", "b"); + appendCompactFormatProperty("c", "d", true); + appendCompactFormatProperty("e", "f", false, "g"); + endConfig(); + Path fileResource = new Path(CONFIG); + Configuration conf = new Configuration(false); + conf.addResource(fileResource); + + assertEquals("b", conf.get("a")); + + assertEquals("d", conf.get("c")); + Set<String> s = conf.getFinalParameters(); + assertEquals(1, s.size()); + assertTrue(s.contains("c")); + + assertEquals("f", conf.get("e")); + String[] sources = conf.getPropertySources("e"); + assertEquals(2, sources.length); + assertEquals("g", sources[0]); + assertEquals(fileResource.toString(), sources[1]); + } + public static void assertEq(Object a, Object b) { System.out.println("assertEq: " + a + ", " + b); assertEquals(a, b); @@ -264,6 +289,36 @@ public class TestConfiguration extends TestCase { out.write("</property>\n"); } + void appendCompactFormatProperty(String name, String val) throws IOException { + appendCompactFormatProperty(name, val, false); + } + + void appendCompactFormatProperty(String name, String val, boolean isFinal) + throws IOException { + appendCompactFormatProperty(name, val, isFinal, null); + } + + void appendCompactFormatProperty(String name, String val, boolean isFinal, + String source) + throws IOException { + out.write("<property "); + out.write("name=\""); + out.write(name); + out.write("\" "); + out.write("value=\""); + out.write(val); + out.write("\" "); + if (isFinal) { + out.write("final=\"true\" "); + } + if (source != null) { + out.write("source=\""); + out.write(source); + out.write("\" "); + } + out.write("/>\n"); + } + public void testOverlay() throws IOException{ out=new BufferedWriter(new FileWriter(CONFIG)); startConfig();
