diff --git a/hcatalog/webhcat/svr/src/main/config/webhcat-default.xml b/hcatalog/webhcat/svr/src/main/config/webhcat-default.xml index 801f3a5..e33cf8c 100644 --- a/hcatalog/webhcat/svr/src/main/config/webhcat-default.xml +++ b/hcatalog/webhcat/svr/src/main/config/webhcat-default.xml @@ -32,6 +32,12 @@ + templeton.jetty.configuration + + The embedded jetty configuration file. + + + templeton.hadoop.conf.dir ${env.HADOOP_CONF_DIR} The path to the Hadoop configuration. diff --git a/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java b/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java index 992aa38..161ab3b 100644 --- a/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java +++ b/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java @@ -95,6 +95,7 @@ } public static final String PORT = "templeton.port"; + public static final String JETTY_CONFIGURATION = "templeton.jetty.configuration"; public static final String EXEC_ENCODING_NAME = "templeton.exec.encoding"; public static final String EXEC_ENVS_NAME = "templeton.exec.envs"; public static final String EXEC_MAX_BYTES_NAME = "templeton.exec.max-output-bytes"; @@ -340,6 +341,7 @@ private boolean loadOneClasspathConfig(String fname) { return false; } + public String jettyConfiguration() { return get(JETTY_CONFIGURATION); } public String libJars() { return get(LIB_JARS_NAME); } public String hadoopQueueName() { return get(HADOOP_QUEUE_NAME); } public String enableJobReconnectDefault() { return get(ENABLE_JOB_RECONNECT_DEFAULT); } diff --git a/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/Main.java b/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/Main.java index 8aca9da..3569871 100644 --- a/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/Main.java +++ b/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/Main.java @@ -22,12 +22,15 @@ import com.sun.jersey.spi.container.servlet.ServletContainer; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.ArrayUtils; import org.apache.hadoop.hive.common.classification.InterfaceAudience; import org.apache.hadoop.hive.common.classification.InterfaceStability; import org.apache.hadoop.hdfs.web.AuthFilter; @@ -44,6 +47,7 @@ import org.eclipse.jetty.servlet.FilterMapping; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.xml.XmlConfiguration; import org.slf4j.bridge.SLF4JBridgeHandler; import javax.servlet.http.HttpServletRequest; @@ -116,6 +120,9 @@ public void run() { try { checkEnv(); runServer(port); + // Currently only print the first port to be consistent with old behavior + port = ArrayUtils.isEmpty(server.getConnectors()) ? -1 : server.getConnectors()[0].getPort(); + System.out.println("templeton: listening on port " + port); LOG.info("Templeton listening on port " + port); } catch (Exception e) { @@ -153,7 +160,7 @@ private void checkCurrentDirPermissions() { } } - public Server runServer(int port) + public Server runServer(Integer port) throws Exception { //Authenticate using keytab @@ -162,8 +169,17 @@ public Server runServer(int port) conf.kerberosKeytab()); } - // Create the Jetty server - Server server = new Server(port); + // Create the Jetty server. If jetty conf file exists, use that to create server + // to have more control. + Server server = null; + if (StringUtils.isEmpty(conf.jettyConfiguration())) { + server = new Server(port); + } else { + FileInputStream jettyConf = new FileInputStream(conf.jettyConfiguration()); + XmlConfiguration configuration = new XmlConfiguration(jettyConf); + server = (Server)configuration.configure(); + } + ServletContextHandler root = new ServletContextHandler(server, "/"); // Add the Auth filter