From 4dffd81bb75efaa5742d2246354ebdc86cbd1aab Mon Sep 17 00:00:00 2001 From: Masatake Iwasaki Date: Tue, 10 Dec 2019 10:30:57 +0900 Subject: [PATCH] HDFS-14522. Allow compact property description in xml in httpfs. (#1737) --- .../hadoop/lib/util/ConfigurationUtils.java | 68 +------------------ .../lib/util/TestConfigurationUtils.java | 20 +++++- .../test-compact-format-property.xml | 18 +++++ 3 files changed, 36 insertions(+), 70 deletions(-) create mode 100644 hadoop-hdfs-project/hadoop-hdfs-httpfs/src/test/resources/test-compact-format-property.xml diff --git a/hadoop-hdfs-project/hadoop-hdfs-httpfs/src/main/java/org/apache/hadoop/lib/util/ConfigurationUtils.java b/hadoop-hdfs-project/hadoop-hdfs-httpfs/src/main/java/org/apache/hadoop/lib/util/ConfigurationUtils.java index 6611dd22fef..baecce4d856 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-httpfs/src/main/java/org/apache/hadoop/lib/util/ConfigurationUtils.java +++ b/hadoop-hdfs-project/hadoop-hdfs-httpfs/src/main/java/org/apache/hadoop/lib/util/ConfigurationUtils.java @@ -20,17 +20,7 @@ import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.conf.Configuration; -import org.w3c.dom.DOMException; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.Text; -import org.xml.sax.SAXException; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.io.InputStream; import java.util.Map; @@ -98,62 +88,6 @@ public static Configuration resolve(Configuration conf) { * @throws IOException thrown if the configuration could not be read. */ public static void load(Configuration conf, InputStream is) throws IOException { - try { - DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); - // ignore all comments inside the xml file - docBuilderFactory.setIgnoringComments(true); - DocumentBuilder builder = docBuilderFactory.newDocumentBuilder(); - Document doc = builder.parse(is); - parseDocument(conf, doc); - } catch (SAXException e) { - throw new IOException(e); - } catch (ParserConfigurationException e) { - throw new IOException(e); - } + conf.addResource(is); } - - // Canibalized from FileSystemAccess Configuration.loadResource(). - private static void parseDocument(Configuration conf, Document doc) throws IOException { - try { - Element root = doc.getDocumentElement(); - if (!"configuration".equals(root.getTagName())) { - throw new IOException("bad conf file: top-level element not "); - } - NodeList props = root.getChildNodes(); - for (int i = 0; i < props.getLength(); i++) { - Node propNode = props.item(i); - if (!(propNode instanceof Element)) { - continue; - } - Element prop = (Element) propNode; - if (!"property".equals(prop.getTagName())) { - throw new IOException("bad conf file: element not "); - } - NodeList fields = prop.getChildNodes(); - String attr = null; - String value = null; - for (int j = 0; j < fields.getLength(); j++) { - Node fieldNode = fields.item(j); - if (!(fieldNode instanceof Element)) { - continue; - } - Element field = (Element) fieldNode; - if ("name".equals(field.getTagName()) && field.hasChildNodes()) { - attr = ((Text) field.getFirstChild()).getData().trim(); - } - if ("value".equals(field.getTagName()) && field.hasChildNodes()) { - value = ((Text) field.getFirstChild()).getData(); - } - } - - if (attr != null && value != null) { - conf.set(attr, value); - } - } - - } catch (DOMException e) { - throw new IOException(e); - } - } - } diff --git a/hadoop-hdfs-project/hadoop-hdfs-httpfs/src/test/java/org/apache/hadoop/lib/util/TestConfigurationUtils.java b/hadoop-hdfs-project/hadoop-hdfs-httpfs/src/test/java/org/apache/hadoop/lib/util/TestConfigurationUtils.java index 925edc54084..b868d0b3a2b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-httpfs/src/test/java/org/apache/hadoop/lib/util/TestConfigurationUtils.java +++ b/hadoop-hdfs-project/hadoop-hdfs-httpfs/src/test/java/org/apache/hadoop/lib/util/TestConfigurationUtils.java @@ -44,11 +44,13 @@ public void constructors() throws Exception { } - @Test(expected = IOException.class) - public void constructorsFail3() throws Exception { - InputStream is = new ByteArrayInputStream("".getBytes()); + @Test + public void constructors3() throws Exception { + InputStream is = new ByteArrayInputStream( + "".getBytes()); Configuration conf = new Configuration(false); ConfigurationUtils.load(conf, is); + assertEquals("val1", conf.get("key1")); } @Test @@ -124,4 +126,16 @@ public void testVarResolutionAndSysProps() { assertEquals(conf.get("user.name"), "foo"); } + @Test + public void testCompactFormatProperty() throws IOException { + final String testfile = "test-compact-format-property.xml"; + Configuration conf = new Configuration(false); + assertEquals(0, conf.size()); + ConfigurationUtils.load(conf, + Thread.currentThread() + .getContextClassLoader().getResource(testfile).openStream()); + assertEquals(2, conf.size()); + assertEquals("val1", conf.get("key.1")); + assertEquals("val2", conf.get("key.2")); + } } diff --git a/hadoop-hdfs-project/hadoop-hdfs-httpfs/src/test/resources/test-compact-format-property.xml b/hadoop-hdfs-project/hadoop-hdfs-httpfs/src/test/resources/test-compact-format-property.xml new file mode 100644 index 00000000000..f216c4c5ca8 --- /dev/null +++ b/hadoop-hdfs-project/hadoop-hdfs-httpfs/src/test/resources/test-compact-format-property.xml @@ -0,0 +1,18 @@ + + + + + +