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:28:57 UTC

svn commit: r1068102 - in /hbase/trunk: CHANGES.txt src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java

Author: todd
Date: Mon Feb  7 20:28:57 2011
New Revision: 1068102

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

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

Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1068102&r1=1068101&r2=1068102&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Mon Feb  7 20:28:57 2011
@@ -91,6 +91,8 @@ Release 0.90.1 - Unreleased
   BUG FIXES
    HBASE-3483  Memstore lower limit should trigger asynchronous flushes
 
+  IMPROVEMENTS
+   HBASE-3470  Check that hbase-default.xml is loaded from within jar
 
 Release 0.90.0 - January 19th, 2011
   INCOMPATIBLE CHANGES

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java?rev=1068102&r1=1068101&r2=1068102&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/HBaseConfiguration.java Mon Feb  7 20:28:57 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;