Author: harsh
Date: Thu Jun 21 21:12:31 2012
New Revision: 1352689
URL: http://svn.apache.org/viewvc?rev=1352689&view=rev
Log:
HADOOP-8524. Allow users to get source of a Configuration parameter. (harsh)
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1352689&r1=1352688&r2=1352689&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Thu Jun 21 21:12:31
2012
@@ -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
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java?rev=1352689&r1=1352688&r2=1352689&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java
(original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java
Thu Jun 21 21:12:31 2012
@@ -1071,6 +1071,38 @@ public class Configuration implements It
}
/**
+ * 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
* the lower/upper bounds are separated by dash. Either the lower or upper
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java?rev=1352689&r1=1352688&r2=1352689&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java
(original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java
Thu Jun 21 21:12:31 2012
@@ -663,6 +663,26 @@ public class TestConfiguration extends T
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";
|