You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by to...@apache.org on 2011/02/07 21:30:16 UTC

svn commit: r1068105 - in /hbase/branches/0.90: CHANGES.txt src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java

Author: todd
Date: Mon Feb  7 20:30:16 2011
New Revision: 1068105

URL: http://svn.apache.org/viewvc?rev=1068105&view=rev
Log:
HBASE-3470. Check that hbase-default.xml is loaded from within jar

Modified:
    hbase/branches/0.90/CHANGES.txt
    hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java

Modified: hbase/branches/0.90/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/CHANGES.txt?rev=1068105&r1=1068104&r2=1068105&view=diff
==============================================================================
--- hbase/branches/0.90/CHANGES.txt (original)
+++ hbase/branches/0.90/CHANGES.txt Mon Feb  7 20:30:16 2011
@@ -26,7 +26,7 @@ Release 0.90.1 - Unreleased
   IMPROVEMENTS
    HBASE-3305  Allow round-robin distribution for table created with
                multiple regions (ted yu via jgray)
-
+   HBASE-3470  Check that hbase-default.xml is loaded from within jar
 
 Release 0.90.0 - January 19th, 2011
   INCOMPATIBLE CHANGES

Modified: hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java?rev=1068105&r1=1068104&r2=1068105&view=diff
==============================================================================
--- hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java (original)
+++ hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java Mon Feb  7 20:30:16 2011
@@ -19,6 +19,7 @@
  */
 package org.apache.hadoop.hbase;
 
+import java.net.URL;
 import java.util.Map.Entry;
 
 import org.apache.commons.logging.Log;
@@ -58,7 +59,35 @@ public class HBaseConfiguration extends 
     }
   }
 
+  /**
+   * Check that the hbase-defaults.xml file is being loaded from within
+   * the hbase jar, rather than somewhere else on the classpath.
+   */
+  private static void checkDefaultsInJar(Configuration conf) {
+    ClassLoader cl = conf.getClassLoader();
+    URL url = cl.getResource("hbase-default.xml");
+    if (url == null) {
+      // This is essentially an assertion failure - we compile this
+      // into our own jar, so there's something really wacky about
+      // the classloader context!
+      throw new AssertionError("hbase-default.xml not on classpath");
+    }
+    if (!"jar".equals(url.getProtocol()) &&
+        !url.getPath().endsWith("target/classes/hbase-default.xml")) {
+      throw new RuntimeException(
+        "hbase-defaults.xml is being loaded from " + url + " rather than " +
+        "the HBase JAR. This is dangerous since you may pick up defaults " +
+        "from a previously installed version of HBase. Please remove " +
+        "hbase-default.xml from your configuration directory.");
+    }
+  }
+
+    
+
+
   public static Configuration addHbaseResources(Configuration conf) {
+    checkDefaultsInJar(conf);
+
     conf.addResource("hbase-default.xml");
     conf.addResource("hbase-site.xml");
     return conf;