You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by dh...@apache.org on 2009/01/30 22:56:13 UTC
svn commit: r739420 - in /hadoop/core/branches/branch-0.20: CHANGES.txt
src/core/org/apache/hadoop/conf/Configuration.java
src/test/org/apache/hadoop/conf/TestConfiguration.java
Author: dhruba
Date: Fri Jan 30 21:56:12 2009
New Revision: 739420
URL: http://svn.apache.org/viewvc?rev=739420&view=rev
Log:
HADOOP-4944. A configuration file can include other configuration
files. (Rama Ramasamy via dhruba)
Modified:
hadoop/core/branches/branch-0.20/CHANGES.txt (contents, props changed)
hadoop/core/branches/branch-0.20/src/core/org/apache/hadoop/conf/Configuration.java
hadoop/core/branches/branch-0.20/src/test/org/apache/hadoop/conf/TestConfiguration.java
Modified: hadoop/core/branches/branch-0.20/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.20/CHANGES.txt?rev=739420&r1=739419&r2=739420&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.20/CHANGES.txt (original)
+++ hadoop/core/branches/branch-0.20/CHANGES.txt Fri Jan 30 21:56:12 2009
@@ -319,6 +319,9 @@
HADOOP-4920. Stop storing Forrest output in Subversion. (cutting)
+ HADOOP-4944. A configuration file can include other configuration
+ files. (Rama Ramasamy via dhruba)
+
OPTIMIZATIONS
HADOOP-3293. Fixes FileInputFormat to do provide locations for splits
Propchange: hadoop/core/branches/branch-0.20/CHANGES.txt
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jan 30 21:56:12 2009
@@ -1,3 +1,3 @@
/hadoop/core/branches/branch-0.18/CHANGES.txt:727226
/hadoop/core/branches/branch-0.19/CHANGES.txt:713112
-/hadoop/core/trunk/CHANGES.txt:727001,727117,727191,727212,727228,727255,727869,728187,729052,729987,732385,732572,732777,732838,732869,733887,734870,734916,735082,736426,738602,738697
+/hadoop/core/trunk/CHANGES.txt:727001,727117,727191,727212,727228,727255,727869,728187,729052,729987,732385,732572,732777,732838,732869,733887,734870,734916,735082,736426,738602,738697,739416
Modified: hadoop/core/branches/branch-0.20/src/core/org/apache/hadoop/conf/Configuration.java
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.20/src/core/org/apache/hadoop/conf/Configuration.java?rev=739420&r1=739419&r2=739420&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.20/src/core/org/apache/hadoop/conf/Configuration.java (original)
+++ hadoop/core/branches/branch-0.20/src/core/org/apache/hadoop/conf/Configuration.java Fri Jan 30 21:56:12 2009
@@ -1046,9 +1046,13 @@
= DocumentBuilderFactory.newInstance();
//ignore all comments inside the xml file
docBuilderFactory.setIgnoringComments(true);
+
+ //allow includes in the xml file
+ docBuilderFactory.setNamespaceAware(true);
+ docBuilderFactory.setXIncludeAware(true);
DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();
Document doc = null;
-
+ Element root = null;
if (name instanceof URL) { // an URL resource
URL url = (URL)name;
@@ -1088,15 +1092,19 @@
} finally {
((InputStream)name).close();
}
+ } else if (name instanceof Element) {
+ root = (Element)name;
}
- if (doc == null) {
+ if (doc == null && root == null) {
if (quiet)
return;
throw new RuntimeException(name + " not found");
}
- Element root = doc.getDocumentElement();
+ if (root == null) {
+ root = doc.getDocumentElement();
+ }
if (!"configuration".equals(root.getTagName()))
LOG.fatal("bad conf file: top-level element not <configuration>");
NodeList props = root.getChildNodes();
@@ -1105,6 +1113,10 @@
if (!(propNode instanceof Element))
continue;
Element prop = (Element)propNode;
+ if ("configuration".equals(prop.getTagName())) {
+ loadResource(properties, prop, quiet);
+ continue;
+ }
if (!"property".equals(prop.getTagName()))
LOG.warn("bad conf file: element not <property>");
NodeList fields = prop.getChildNodes();
Modified: hadoop/core/branches/branch-0.20/src/test/org/apache/hadoop/conf/TestConfiguration.java
URL: http://svn.apache.org/viewvc/hadoop/core/branches/branch-0.20/src/test/org/apache/hadoop/conf/TestConfiguration.java?rev=739420&r1=739419&r2=739420&view=diff
==============================================================================
--- hadoop/core/branches/branch-0.20/src/test/org/apache/hadoop/conf/TestConfiguration.java (original)
+++ hadoop/core/branches/branch-0.20/src/test/org/apache/hadoop/conf/TestConfiguration.java Fri Jan 30 21:56:12 2009
@@ -62,7 +62,11 @@
out.write("</configuration>\n");
out.close();
}
-
+
+ private void addInclude(String filename) throws IOException{
+ out.write("<xi:include href=\"" + filename + "\" xmlns:xi=\"http://www.w3.org/2001/XInclude\" />\n ");
+ }
+
public void testVariableSubstitution() throws IOException {
out=new BufferedWriter(new FileWriter(CONFIG));
startConfig();
@@ -228,6 +232,32 @@
fileResource.toString();
assertEquals(expectedOutput, conf.toString());
}
+
+ public void testIncludes() throws Exception {
+ tearDown();
+ System.out.println("XXX testIncludes");
+ out=new BufferedWriter(new FileWriter(CONFIG2));
+ startConfig();
+ appendProperty("a","b");
+ appendProperty("c","d");
+ endConfig();
+
+ out=new BufferedWriter(new FileWriter(CONFIG));
+ startConfig();
+ addInclude(CONFIG2);
+ appendProperty("e","f");
+ appendProperty("g","h");
+ endConfig();
+
+ // verify that the includes file contains all properties
+ Path fileResource = new Path(CONFIG);
+ conf.addResource(fileResource);
+ assertEquals(conf.get("a"), "b");
+ assertEquals(conf.get("c"), "d");
+ assertEquals(conf.get("e"), "f");
+ assertEquals(conf.get("g"), "h");
+ tearDown();
+ }
BufferedWriter out;