Repository: hive
Updated Branches:
  refs/heads/master 26268deb4 -> 16fb16d52


HIVE-12958: Make embedded Jetty server more configurable (Aihua Xu, reviewed by 
Yongzhi Chen)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/16fb16d5
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/16fb16d5
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/16fb16d5

Branch: refs/heads/master
Commit: 16fb16d524096bfead386ab50d772659ead773d5
Parents: 26268de
Author: Aihua Xu <aihu...@apache.org>
Authored: Thu Jan 28 16:00:24 2016 -0500
Committer: Aihua Xu <aihu...@apache.org>
Committed: Thu Feb 4 10:58:58 2016 -0500

----------------------------------------------------------------------
 .../svr/src/main/config/webhcat-default.xml     |  6 ++++++
 .../hive/hcatalog/templeton/AppConfig.java      |  2 ++
 .../apache/hive/hcatalog/templeton/Main.java    | 20 ++++++++++++++++++--
 3 files changed, 26 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/16fb16d5/hcatalog/webhcat/svr/src/main/config/webhcat-default.xml
----------------------------------------------------------------------
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 @@
   </property>
 
   <property>
+    <name>templeton.jetty.configuration</name>
+    <value></value>
+    <description>The embedded jetty configuration file.</description>
+  </property>
+
+  <property>
     <name>templeton.hadoop.conf.dir</name>
     <value>${env.HADOOP_CONF_DIR}</value>
     <description>The path to the Hadoop configuration.</description>

http://git-wip-us.apache.org/repos/asf/hive/blob/16fb16d5/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/AppConfig.java
----------------------------------------------------------------------
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 class AppConfig extends Configuration {
   }
 
   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 @@ public class AppConfig extends Configuration {
     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); }

http://git-wip-us.apache.org/repos/asf/hive/blob/16fb16d5/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/Main.java
----------------------------------------------------------------------
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..d5fea1e 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.api.core.PackagesResourceConfig;
 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.FilterHolder;
 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 class Main {
     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) {
@@ -162,8 +169,17 @@ public class Main {
         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

Reply via email to