Explorar el Código

HADOOP-6227. Fix Configuration to allow final parameters to be set to null and prevent them from being overridden. Contributed by Amareshwari Sriramadasu.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@810097 13f79535-47bb-0310-9956-ffa450edef68
Hemanth Yamijala hace 16 años
padre
commit
75103dc925

+ 4 - 0
CHANGES.txt

@@ -951,6 +951,10 @@ Trunk (unreleased changes)
     HADOOP-6215. fix GenericOptionParser to deal with -D with '=' in the 
     value. (Amar Kamat via sharad)
 
+    HADOOP-6227. Fix Configuration to allow final parameters to be set to null
+    and prevent them from being overridden.
+    (Amareshwari Sriramadasu via yhemanth)
+
 Release 0.20.1 - Unreleased
 
   INCOMPATIBLE CHANGES

+ 13 - 10
src/java/org/apache/hadoop/conf/Configuration.java

@@ -1286,17 +1286,20 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
         }
         
         // Ignore this parameter if it has already been marked as 'final'
-        if (attr != null && value != null) {
-          if (!finalParameters.contains(attr)) {
-            properties.setProperty(attr, value);
-            if (storeResource) {
-              updatingResource.put(attr, name.toString());
-            }
-            if (finalParameter)
-              finalParameters.add(attr);
-          } else {
-            LOG.warn(name+":a attempt to override final parameter: "+attr
+        if (attr != null) {
+          if (value != null) {
+            if (!finalParameters.contains(attr)) {
+              properties.setProperty(attr, value);
+              if (storeResource) {
+                updatingResource.put(attr, name.toString());
+              }
+            } else {
+              LOG.warn(name+":a attempt to override final parameter: "+attr
                      +";  Ignoring.");
+            }
+          }
+          if (finalParameter) {
+            finalParameters.add(attr);
           }
         }
       }

+ 22 - 1
src/test/core/org/apache/hadoop/conf/TestConfiguration.java

@@ -100,7 +100,28 @@ public class TestConfiguration extends TestCase {
     assertTrue(conf.getInt("intvar", -1) == 42);
     assertTrue(conf.getInt("my.int", -1) == 42);
   }
-    
+
+  public void testFinalParam() throws IOException {
+    out=new BufferedWriter(new FileWriter(CONFIG));
+    startConfig();
+    declareProperty("my.var", "", "", true);
+    endConfig();
+    Path fileResource = new Path(CONFIG);
+    Configuration conf1 = new Configuration();
+    conf1.addResource(fileResource);
+    assertNull("my var is not null", conf1.get("my.var"));
+	
+    out=new BufferedWriter(new FileWriter(CONFIG2));
+    startConfig();
+    declareProperty("my.var", "myval", "myval", false);
+    endConfig();
+    fileResource = new Path(CONFIG2);
+
+    Configuration conf2 = new Configuration(conf1);
+    conf2.addResource(fileResource);
+    assertNull("my var is not final", conf2.get("my.var"));
+  }
+
   public static void assertEq(Object a, Object b) {
     System.out.println("assertEq: " + a + ", " + b);
     assertEquals(a, b);