diff --git hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java index 10fc6df..d49c70c 100644 --- hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java +++ hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java @@ -19,7 +19,13 @@ package org.apache.hive.hcatalog.templeton; import java.io.File; +import java.io.StringBufferInputStream; import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; @@ -141,16 +147,52 @@ private void init() { set("env." + e.getKey(), e.getValue()); String templetonDir = getTempletonDir(); - for (String fname : TEMPLETON_CONF_FILENAMES) + for (String fname : TEMPLETON_CONF_FILENAMES) { + logConfigLoadAttempt(templetonDir + File.separator + fname); if (! loadOneClasspathConfig(fname)) loadOneFileConfig(templetonDir, fname); - + } String hadoopConfDir = getHadoopConfDir(); - for (String fname : HADOOP_CONF_FILENAMES) + for (String fname : HADOOP_CONF_FILENAMES) { + logConfigLoadAttempt(hadoopConfDir + File.separator + fname); loadOneFileConfig(hadoopConfDir, fname); + } ProxyUserSupport.processProxyuserConfig(this); + LOG.info(dumpEnvironent()); + } + private static void logConfigLoadAttempt(String path) { + LOG.info("Attempting to load config file: " + path); } + /** + * Dumps all env and config state. Should be called once on WebHCat start up to facilitate + * support/debugging. Later it may be worth adding a REST call which will return this data. + */ + private String dumpEnvironent() { + StringBuilder sb = new StringBuilder("WebHCat environment:\n"); + Map env = System.getenv(); + List propKeys = new ArrayList(env.keySet()); + Collections.sort(propKeys); + for(String propKey : propKeys) { + sb.append(propKey).append('=').append(env.get(propKey)).append('\n'); + } + sb.append("Configration properties: \n"); + Iterator> configIter = this.iterator(); + List> configVals = new ArrayList>(); + while(configIter.hasNext()) { + configVals.add(configIter.next()); + } + Collections.sort(configVals, new Comparator> () { + @Override + public int compare(Map.Entry ent, Map.Entry ent2) { + return ent.getKey().compareTo(ent2.getKey()); + } + }); + for(Map.Entry entry : configVals) { + sb.append(entry.getKey()).append('=').append(entry.getValue()).append('\n'); + } + return sb.toString(); + } public void startCleanup() { JobState.getStorageInstance(this).startCleanup(this); } @@ -182,7 +224,7 @@ private boolean loadOneClasspathConfig(String fname) { URL x = getResource(fname); if (x != null) { addResource(x); - LOG.debug("loaded config from classpath " + x); + LOG.info("loaded config from classpath " + x); return true; }