HADOOP-7082. Configuration.writeXML should not hold lock while outputting. Contributed by Todd Lipcon
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1055206 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
168bf7b71d
commit
717579f3bd
|
@ -413,6 +413,9 @@ Release 0.22.0 - Unreleased
|
|||
HADOOP-7038. saveVersion script includes an additional \r while running
|
||||
whoami under windows. (Wang Xu via cos)
|
||||
|
||||
HADOOP-7082. Configuration.writeXML should not hold lock while outputting
|
||||
(todd)
|
||||
|
||||
Release 0.21.1 - Unreleased
|
||||
|
||||
IMPROVEMENTS
|
||||
|
|
|
@ -1588,11 +1588,36 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
|
|||
*
|
||||
* @param out the writer to write to.
|
||||
*/
|
||||
public synchronized void writeXml(Writer out) throws IOException {
|
||||
public void writeXml(Writer out) throws IOException {
|
||||
Document doc = asXmlDocument();
|
||||
|
||||
Properties properties = getProps();
|
||||
try {
|
||||
Document doc =
|
||||
DOMSource source = new DOMSource(doc);
|
||||
StreamResult result = new StreamResult(out);
|
||||
TransformerFactory transFactory = TransformerFactory.newInstance();
|
||||
Transformer transformer = transFactory.newTransformer();
|
||||
|
||||
// Important to not hold Configuration log while writing result, since
|
||||
// 'out' may be an HDFS stream which needs to lock this configuration
|
||||
// from another thread.
|
||||
transformer.transform(source, result);
|
||||
} catch (TransformerException te) {
|
||||
throw new IOException(te);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the XML DOM corresponding to this Configuration.
|
||||
*/
|
||||
private synchronized Document asXmlDocument() throws IOException {
|
||||
Document doc;
|
||||
try {
|
||||
doc =
|
||||
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
|
||||
} catch (ParserConfigurationException pe) {
|
||||
throw new IOException(pe);
|
||||
}
|
||||
Element conf = doc.createElement("configuration");
|
||||
doc.appendChild(conf);
|
||||
conf.appendChild(doc.createTextNode("\n"));
|
||||
|
@ -1623,17 +1648,7 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
|
|||
|
||||
conf.appendChild(doc.createTextNode("\n"));
|
||||
}
|
||||
|
||||
DOMSource source = new DOMSource(doc);
|
||||
StreamResult result = new StreamResult(out);
|
||||
TransformerFactory transFactory = TransformerFactory.newInstance();
|
||||
Transformer transformer = transFactory.newTransformer();
|
||||
transformer.transform(source, result);
|
||||
} catch (TransformerException te) {
|
||||
throw new IOException(te);
|
||||
} catch (ParserConfigurationException pe) {
|
||||
throw new IOException(pe);
|
||||
}
|
||||
return doc;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue