svn merge -c 1352689 from trunk. Backport HADOOP-8524 to branch-2. (harsh)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1352693 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Harsh J 2012-06-21 21:15:46 +00:00
parent 22d23a4d0f
commit 13bbb35577
3 changed files with 55 additions and 0 deletions

View File

@ -44,6 +44,9 @@ Release 2.0.1-alpha - UNRELEASED
HADOOP-8368. Use CMake rather than autotools to build native code (ccccabe via tucu) HADOOP-8368. Use CMake rather than autotools to build native code (ccccabe via tucu)
HADOOP-8524. Allow users to get source of a Configuration
parameter (harsh)
BUG FIXES BUG FIXES
HADOOP-8372. NetUtils.normalizeHostName() incorrectly handles hostname HADOOP-8372. NetUtils.normalizeHostName() incorrectly handles hostname

View File

@ -1034,6 +1034,38 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
} }
} }
/**
* Gets the absolute path to the resource object (file, URL, etc.), for a given
* property name.
*
* @param name - The property name to get the source of.
* @return null - If the property or its source wasn't found or if the property
* was defined in code (i.e. in a Configuration instance, not from a physical
* resource). Otherwise, returns the absolute path of the resource that loaded
* the property name, as a String.
*/
@InterfaceStability.Unstable
public synchronized String getPropertySource(String name) {
if (properties == null) {
// If properties is null, it means a resource was newly added
// but the props were cleared so as to load it upon future
// requests. So lets force a load by asking a properties list.
getProps();
}
// Return a null right away if our properties still
// haven't loaded or the resource mapping isn't defined
if (properties == null || updatingResource == null) {
return null;
} else {
String source = updatingResource.get(name);
if (source == null || source.equals(UNKNOWN_RESOURCE)) {
return null;
} else {
return source;
}
}
}
/** /**
* A class that represents a set of positive integer ranges. It parses * A class that represents a set of positive integer ranges. It parses
* strings of the form: "2-3,5,7-" where ranges are separated by comma and * strings of the form: "2-3,5,7-" where ranges are separated by comma and

View File

@ -640,6 +640,26 @@ public class TestConfiguration extends TestCase {
conf.getPattern("test.pattern3", defaultPattern).pattern()); conf.getPattern("test.pattern3", defaultPattern).pattern());
} }
public void testPropertySource() throws IOException {
out = new BufferedWriter(new FileWriter(CONFIG));
startConfig();
appendProperty("test.foo", "bar");
endConfig();
Path fileResource = new Path(CONFIG);
conf.addResource(fileResource);
conf.set("fs.defaultFS", "value");
assertEquals(
"Resource string returned for a file-loaded property" +
" must be a proper absolute path",
fileResource,
new Path(conf.getPropertySource("test.foo")));
assertEquals("Resource string returned for a set() property must be null",
null,
conf.getPropertySource("fs.defaultFS"));
assertEquals("Resource string returned for an unset property must be null",
null, conf.getPropertySource("fs.defaultFoo"));
}
public void testSocketAddress() throws IOException { public void testSocketAddress() throws IOException {
Configuration conf = new Configuration(); Configuration conf = new Configuration();
final String defaultAddr = "host:1"; final String defaultAddr = "host:1";