فهرست منبع

HADOOP-7851. Configuration.getClasses() never returns the default value. (amarrk)

(cherry picked from commit 82d57ee7fee82919b42066af38063a27d0998806)
Amar Kamat 13 سال پیش
والد
کامیت
61ba70c978

+ 3 - 3
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -151,6 +151,9 @@ Release 2.7.4 - UNRELEASED
     HADOOP-14434. Use MoveFileEx to allow renaming a file when the destination
     exists. (Lukas Majercak via cdouglas)
 
+    HADOOP-7851. Configuration.getClasses() never returns the default value. 
+    (Uma Maheswara Rao G via amarrk)
+
 Release 2.7.3 - 2016-08-25
 
   INCOMPATIBLE CHANGES
@@ -5382,9 +5385,6 @@ Release 0.23.1 - 2012-02-17
 
    HADOOP-7841. Run tests with non-secure random. (tlipcon)
 
-    HADOOP-7851. Configuration.getClasses() never returns the default value. 
-                 (Uma Maheswara Rao G via amarrk)
-
    HADOOP-7787. Make source tarball use conventional name.
    (Bruno Mahé via tomwhite)
 

+ 4 - 2
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java

@@ -2161,9 +2161,11 @@ public class Configuration implements Iterable<Map.Entry<String,String>>,
    *         or <code>defaultValue</code>. 
    */
   public Class<?>[] getClasses(String name, Class<?> ... defaultValue) {
-    String[] classnames = getTrimmedStrings(name);
-    if (classnames == null)
+    String valueString = getRaw(name);
+    if (null == valueString) {
       return defaultValue;
+    }
+    String[] classnames = getTrimmedStrings(name);
     try {
       Class<?>[] classes = new Class<?>[classnames.length];
       for(int i = 0; i < classnames.length; i++) {

+ 21 - 0
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java

@@ -1355,6 +1355,27 @@ public class TestConfiguration extends TestCase {
     // it's expected behaviour.
   }
 
+  public void testGetClassesShouldReturnDefaultValue() throws Exception {
+    Configuration config = new Configuration();
+    Class<?>[] classes = 
+      config.getClasses("testClassName", Configuration.class);
+    assertEquals(
+        "Not returning expected number of classes. Number of returned classes ="
+            + classes.length, 1, classes.length);
+    assertEquals("Not returning the default class Name", Configuration.class,
+        classes[0]);
+  }
+
+  public void testGetClassesShouldReturnEmptyArray()
+      throws Exception {
+    Configuration config = new Configuration();
+    config.set("testClassName", "");
+    Class<?>[] classes = config.getClasses("testClassName", Configuration.class);
+    assertEquals(
+        "Not returning expected number of classes. Number of returned classes ="
+            + classes.length, 0, classes.length);
+  }
+
   public static void main(String[] argv) throws Exception {
     junit.textui.TestRunner.main(new String[]{
       TestConfiguration.class.getName()