HADOOP-14727. Socket not closed properly when reading Configurations with BlockReaderRemote. Contributed by Jonathan Eagles.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/a3a9c976 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/a3a9c976 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/a3a9c976 Branch: refs/heads/YARN-5881 Commit: a3a9c976c3cfa3ab6b0936eb8cf0889891bd0678 Parents: 0b67436 Author: Xiao Chen <x...@apache.org> Authored: Fri Aug 4 20:53:45 2017 -0700 Committer: Xiao Chen <x...@apache.org> Committed: Mon Aug 7 10:25:52 2017 -0700 ---------------------------------------------------------------------- .../java/org/apache/hadoop/conf/Configuration.java | 15 ++++++++++----- .../org/apache/hadoop/conf/TestConfiguration.java | 6 ++++-- 2 files changed, 14 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/a3a9c976/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 e26d3a8..65e8569 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 @@ -18,6 +18,8 @@ package org.apache.hadoop.conf; +import com.ctc.wstx.io.StreamBootstrapper; +import com.ctc.wstx.io.SystemId; import com.ctc.wstx.stax.WstxInputFactory; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; @@ -94,7 +96,6 @@ import org.apache.hadoop.security.alias.CredentialProviderFactory; import org.apache.hadoop.util.ReflectionUtils; import org.apache.hadoop.util.StringInterner; import org.apache.hadoop.util.StringUtils; -import org.codehaus.stax2.XMLInputFactory2; import org.codehaus.stax2.XMLStreamReader2; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -285,7 +286,8 @@ public class Configuration implements Iterable<Map.Entry<String,String>>, * Specify exact input factory to avoid time finding correct one. * Factory is reusable across un-synchronized threads once initialized */ - private static final XMLInputFactory2 XML_INPUT_FACTORY = new WstxInputFactory(); + private static final WstxInputFactory XML_INPUT_FACTORY = + new WstxInputFactory(); /** * Class to keep the information about the keys which replace the deprecated @@ -2647,15 +2649,18 @@ public class Configuration implements Iterable<Map.Entry<String,String>>, return parse(connection.getInputStream(), url.toString()); } - private XMLStreamReader parse(InputStream is, - String systemId) throws IOException, XMLStreamException { + private XMLStreamReader parse(InputStream is, String systemIdStr) + throws IOException, XMLStreamException { if (!quietmode) { LOG.debug("parsing input stream " + is); } if (is == null) { return null; } - return XML_INPUT_FACTORY.createXMLStreamReader(systemId, is); + SystemId systemId = SystemId.construct(systemIdStr); + return XML_INPUT_FACTORY.createSR(XML_INPUT_FACTORY.createPrivateConfig(), + systemId, StreamBootstrapper.getInstance(null, systemId, is), false, + true); } private void loadResources(Properties properties, http://git-wip-us.apache.org/repos/asf/hadoop/blob/a3a9c976/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 2af61c0..92d3290 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 @@ -155,11 +155,13 @@ public class TestConfiguration extends TestCase { startConfig(); declareProperty("prop", "A", "A"); endConfig(); - - InputStream in1 = new ByteArrayInputStream(writer.toString().getBytes()); + + InputStream in1 = Mockito.spy(new ByteArrayInputStream( + writer.toString().getBytes())); Configuration conf = new Configuration(false); conf.addResource(in1); assertEquals("A", conf.get("prop")); + Mockito.verify(in1, Mockito.times(1)).close(); InputStream in2 = new ByteArrayInputStream(writer.toString().getBytes()); conf.addResource(in2); assertEquals("A", conf.get("prop")); --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org