HADOOP-8524. Allow users to get source of a Configuration parameter. (harsh)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1352689 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Harsh J 2012-06-21 21:12:31 +00:00
parent 126dd6adef
commit d1138f0914
3 changed files with 55 additions and 0 deletions

View File

@ -209,6 +209,9 @@ Branch-2 ( Unreleased changes )
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
HADOOP-8372. NetUtils.normalizeHostName() incorrectly handles hostname

View File

@ -1070,6 +1070,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
* strings of the form: "2-3,5,7-" where ranges are separated by comma and

View File

@ -663,6 +663,26 @@ public class TestConfiguration extends TestCase {
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 {
Configuration conf = new Configuration();
final String defaultAddr = "host:1";