You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by en...@apache.org on 2013/01/17 03:29:03 UTC

svn commit: r1434541 - in /hbase/trunk: hbase-common/src/main/java/org/apache/hadoop/hbase/ hbase-common/src/test/java/org/apache/hadoop/hbase/ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ hbase-server/src/test/java/org/apache/hadoo...

Author: enis
Date: Thu Jan 17 02:29:03 2013
New Revision: 1434541

URL: http://svn.apache.org/viewvc?rev=1434541&view=rev
Log:
HBASE-7563. Move CompoundConfiguration to common and add string map support (Sergey Shelukhin). Addendum commit for the moved files.

Added:
    hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/CompoundConfiguration.java
      - copied, changed from r1434538, hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompoundConfiguration.java
    hbase/trunk/hbase-common/src/test/java/org/apache/hadoop/hbase/TestCompoundConfiguration.java
      - copied, changed from r1434538, hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompoundConfiguration.java
Removed:
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompoundConfiguration.java
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompoundConfiguration.java

Copied: hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/CompoundConfiguration.java (from r1434538, hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompoundConfiguration.java)
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/CompoundConfiguration.java?p2=hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/CompoundConfiguration.java&p1=hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompoundConfiguration.java&r1=1434538&r2=1434541&rev=1434541&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/CompoundConfiguration.java (original)
+++ hbase/trunk/hbase-common/src/main/java/org/apache/hadoop/hbase/CompoundConfiguration.java Thu Jan 17 02:29:03 2013
@@ -17,7 +17,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.hadoop.hbase.regionserver;
+package org.apache.hadoop.hbase;
 
 import java.io.DataInput;
 import java.io.DataOutput;
@@ -46,13 +46,9 @@ import org.apache.hadoop.util.StringUtil
  * configuration objects and have changes reflected everywhere. In contrast to a
  * deep merge, that requires you to explicitly know all applicable copies to
  * propagate changes.
- * <p>
- * This class is package private because we expect significant refactoring here
- * on the HBase side when certain HDFS changes are added & ubiquitous. Will
- * revisit expanding access at that point.
  */
 @InterfaceAudience.Private
-class CompoundConfiguration extends Configuration {
+public class CompoundConfiguration extends Configuration {
   /**
    * Default Constructor. Initializes empty configuration
    */
@@ -71,12 +67,9 @@ class CompoundConfiguration extends Conf
   protected List<ImmutableConfigMap> configs
     = new ArrayList<ImmutableConfigMap>();
 
-  /****************************************************************************
-   * These initial APIs actually required original thought
-   ***************************************************************************/
-
   /**
-   * Add Hadoop Configuration object to config list
+   * Add Hadoop Configuration object to config list.
+   * The added configuration overrides the previous ones if there are name collisions.
    * @param conf configuration object
    * @return this, for builder pattern
    */
@@ -121,13 +114,14 @@ class CompoundConfiguration extends Conf
   /**
    * Add ImmutableBytesWritable map to config list. This map is generally
    * created by HTableDescriptor or HColumnDescriptor, but can be abstractly
-   * used.
+   * used. The added configuration overrides the previous ones if there are
+   * name collisions.
    *
    * @param map
    *          ImmutableBytesWritable map
    * @return this, for builder pattern
    */
-  public CompoundConfiguration add(
+  public CompoundConfiguration addWritableMap(
       final Map<ImmutableBytesWritable, ImmutableBytesWritable> map) {
     // put new map at the front of the list (top priority)
     this.configs.add(0, new ImmutableConfigMap() {
@@ -158,7 +152,47 @@ class CompoundConfiguration extends Conf
 
       @Override
       public int size() {
-        // TODO Auto-generated method stub
+        return m.size();
+      }
+
+      @Override
+      public String toString() {
+        return m.toString();
+      }
+    });
+    return this;
+  }
+
+  /**
+   * Add String map to config list. This map is generally created by HTableDescriptor
+   * or HColumnDescriptor, but can be abstractly used. The added configuration
+   * overrides the previous ones if there are name collisions.
+   *
+   * @return this, for builder pattern
+   */
+  public CompoundConfiguration addStringMap(final Map<String, String> map) {
+    // put new map at the front of the list (top priority)
+    this.configs.add(0, new ImmutableConfigMap() {
+      Map<String, String> m = map;
+
+      @Override
+      public String get(String key) {
+        return m.get(key);
+      }
+
+      @Override
+      public String getRaw(String key) {
+        return get(key);
+      }
+
+      @Override
+      public Class<?> getClassByName(String name)
+      throws ClassNotFoundException {
+        return null;
+      }
+
+      @Override
+      public int size() {
         return m.size();
       }
 
@@ -205,14 +239,9 @@ class CompoundConfiguration extends Conf
   @Override
   public Class<?> getClassByName(String name) throws ClassNotFoundException {
     for (ImmutableConfigMap m : this.configs) {
-      try {
-        Class<?> value = m.getClassByName(name);
-        if (value != null) {
-          return value;
-        }
-      } catch (ClassNotFoundException e) {
-        // don't propagate an exception until all configs fail
-        continue;
+      Class<?> value = m.getClassByName(name);
+      if (value != null) {
+        return value;
       }
     }
     throw new ClassNotFoundException();

Copied: hbase/trunk/hbase-common/src/test/java/org/apache/hadoop/hbase/TestCompoundConfiguration.java (from r1434538, hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompoundConfiguration.java)
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-common/src/test/java/org/apache/hadoop/hbase/TestCompoundConfiguration.java?p2=hbase/trunk/hbase-common/src/test/java/org/apache/hadoop/hbase/TestCompoundConfiguration.java&p1=hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompoundConfiguration.java&r1=1434538&r2=1434541&rev=1434541&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestCompoundConfiguration.java (original)
+++ hbase/trunk/hbase-common/src/test/java/org/apache/hadoop/hbase/TestCompoundConfiguration.java Thu Jan 17 02:29:03 2013
@@ -17,14 +17,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.hadoop.hbase.regionserver;
+package org.apache.hadoop.hbase;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-import org.apache.hadoop.hbase.regionserver.CompoundConfiguration;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.SmallTests;
 
@@ -99,7 +98,7 @@ public class TestCompoundConfiguration e
 
     CompoundConfiguration compoundConf = new CompoundConfiguration()
       .add(baseConf)
-      .add(map);
+      .addWritableMap(map);
     assertEquals("1", compoundConf.get("A"));
     assertEquals("2b", compoundConf.get("B"));
     assertEquals(33, compoundConf.getInt("C", 0));
@@ -110,4 +109,41 @@ public class TestCompoundConfiguration e
     assertNull(compoundConf.get("G"));
   }
 
+  @Test
+  public void testWithStringMap() {
+    Map<String, String> map = new HashMap<String, String>();
+    map.put("B", "2b");
+    map.put("C", "33");
+    map.put("D", "4");
+    // unlike config, note that IBW Maps can accept null values
+    map.put("G", null);
+
+    CompoundConfiguration compoundConf = new CompoundConfiguration().addStringMap(map);
+    assertEquals("2b", compoundConf.get("B"));
+    assertEquals(33, compoundConf.getInt("C", 0));
+    assertEquals("4", compoundConf.get("D"));
+    assertEquals(4, compoundConf.getInt("D", 0));
+    assertNull(compoundConf.get("E"));
+    assertEquals(6, compoundConf.getInt("F", 6));
+    assertNull(compoundConf.get("G"));
+  }
+
+  @Test
+  public void testLaterConfigsOverrideEarlier() {
+    Map<String, String> map1 = new HashMap<String, String>();
+    map1.put("A", "2");
+    map1.put("D", "5");
+    Map<String, String> map2 = new HashMap<String, String>();
+    map2.put("A", "3");
+    map2.put("B", "4");
+
+    CompoundConfiguration compoundConf = new CompoundConfiguration()
+      .addStringMap(map1).add(baseConf);
+    assertEquals("1", compoundConf.get("A"));
+    assertEquals("5", compoundConf.get("D"));
+    compoundConf.addStringMap(map2);
+    assertEquals("3", compoundConf.get("A"));
+    assertEquals("4", compoundConf.get("B"));
+    assertEquals("5", compoundConf.get("D"));
+  }
 }