HBASE-3470. Check that hbase-default.xml is loaded from within jar

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1068102 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Todd Lipcon 2011-02-07 20:28:57 +00:00
parent 5f64c2d27b
commit b8482c13fa
2 changed files with 31 additions and 0 deletions

View File

@ -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

View File

@ -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 Configuration {
}
}
/**
* 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;