You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by kh...@apache.org on 2016/07/14 21:00:58 UTC

hive git commit: HIVE-14207 : Strip HiveConf hidden params in webui conf (Sushanth Sowmyan, reviewed by Thejas Nair)

Repository: hive
Updated Branches:
  refs/heads/master 7f27c83a9 -> 3522f3f4c


HIVE-14207 : Strip HiveConf hidden params in webui conf (Sushanth Sowmyan, reviewed by Thejas Nair)


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

Branch: refs/heads/master
Commit: 3522f3f4c56773db70150798275ad35ef7c978a1
Parents: 7f27c83
Author: Sushanth Sowmyan <kh...@gmail.com>
Authored: Thu Jul 14 13:34:50 2016 -0700
Committer: Sushanth Sowmyan <kh...@gmail.com>
Committed: Thu Jul 14 14:00:50 2016 -0700

----------------------------------------------------------------------
 .../java/org/apache/hive/http/HttpServer.java   |  5 +-
 .../hadoop/hive/metastore/MetaStoreUtils.java   | 27 +++++++++
 .../apache/hive/service/server/HiveServer2.java | 13 ++--
 .../hive/service/server/TestHS2HttpServer.java  | 64 ++++++++++++++++++--
 4 files changed, 98 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/3522f3f4/common/src/java/org/apache/hive/http/HttpServer.java
----------------------------------------------------------------------
diff --git a/common/src/java/org/apache/hive/http/HttpServer.java b/common/src/java/org/apache/hive/http/HttpServer.java
index 9ceaf3f..0eb5fa9 100644
--- a/common/src/java/org/apache/hive/http/HttpServer.java
+++ b/common/src/java/org/apache/hive/http/HttpServer.java
@@ -130,9 +130,10 @@ public class HttpServer {
       return new HttpServer(this);
     }
 
-    public Builder setConf(HiveConf conf) {
+    public Builder setConf(HiveConf origConf) {
+      this.conf = new HiveConf(origConf);
+      origConf.stripHiddenConfigurations(conf);
       setContextAttribute(CONF_CONTEXT_ATTRIBUTE, conf);
-      this.conf = conf;
       return this;
     }
 

http://git-wip-us.apache.org/repos/asf/hive/blob/3522f3f4/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
----------------------------------------------------------------------
diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
index 2f1e460..f632542 100644
--- a/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
+++ b/metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreUtils.java
@@ -1302,6 +1302,33 @@ public class MetaStoreUtils {
   }
 
   /**
+   * Finds a free port on the machine, but allow the
+   * ability to specify a port number to not use, no matter what.
+   */
+  public static int findFreePortExcepting(int portToExclude) throws IOException {
+    ServerSocket socket1 = null;
+    ServerSocket socket2 = null;
+    try {
+      socket1 = new ServerSocket(0);
+      socket2 = new ServerSocket(0);
+      if (socket1.getLocalPort() != portToExclude) {
+        return socket1.getLocalPort();
+      }
+      // If we're here, then socket1.getLocalPort was the port to exclude
+      // Since both sockets were open together at a point in time, we're
+      // guaranteed that socket2.getLocalPort() is not the same.
+      return socket2.getLocalPort();
+    } finally {
+      if (socket1 != null){
+        socket1.close();
+      }
+      if (socket2 != null){
+        socket2.close();
+      }
+    }
+  }
+
+  /**
    * Catches exceptions that can't be handled and bundles them to MetaException
    *
    * @param e

http://git-wip-us.apache.org/repos/asf/hive/blob/3522f3f4/service/src/java/org/apache/hive/service/server/HiveServer2.java
----------------------------------------------------------------------
diff --git a/service/src/java/org/apache/hive/service/server/HiveServer2.java b/service/src/java/org/apache/hive/service/server/HiveServer2.java
index 14e1e0d..0ecaa76 100644
--- a/service/src/java/org/apache/hive/service/server/HiveServer2.java
+++ b/service/src/java/org/apache/hive/service/server/HiveServer2.java
@@ -145,14 +145,19 @@ public class HiveServer2 extends CompositeService {
     }
     // Setup web UI
     try {
-      if (hiveConf.getBoolVar(ConfVars.HIVE_IN_TEST)) {
-        LOG.info("Web UI is disabled since in test mode");
-      } else {
-        int webUIPort =
+      int webUIPort =
           hiveConf.getIntVar(ConfVars.HIVE_SERVER2_WEBUI_PORT);
+      // We disable web UI in tests unless the test is explicitly setting a
+      // unique web ui port so that we don't mess up ptests.
+      boolean uiDisabledInTest = hiveConf.getBoolVar(ConfVars.HIVE_IN_TEST) &&
+          (webUIPort == Integer.valueOf(ConfVars.HIVE_SERVER2_WEBUI_PORT.getDefaultValue()));
+      if (uiDisabledInTest) {
+        LOG.info("Web UI is disabled in test mode since webui port was not specified");
+      } else {
         if (webUIPort <= 0) {
           LOG.info("Web UI is disabled since port is set to " + webUIPort);
         } else {
+          LOG.info("Starting Web UI on port "+ webUIPort);
           HttpServer.Builder builder = new HttpServer.Builder("hiveserver2");
           builder.setPort(webUIPort).setConf(hiveConf);
           builder.setHost(hiveConf.getVar(ConfVars.HIVE_SERVER2_WEBUI_BIND_HOST));

http://git-wip-us.apache.org/repos/asf/hive/blob/3522f3f4/service/src/test/org/apache/hive/service/server/TestHS2HttpServer.java
----------------------------------------------------------------------
diff --git a/service/src/test/org/apache/hive/service/server/TestHS2HttpServer.java b/service/src/test/org/apache/hive/service/server/TestHS2HttpServer.java
index c06ea26..2d2a81b 100644
--- a/service/src/test/org/apache/hive/service/server/TestHS2HttpServer.java
+++ b/service/src/test/org/apache/hive/service/server/TestHS2HttpServer.java
@@ -25,22 +25,39 @@ import java.net.URL;
 
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
+import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
 /**
  * TestHS2HttpServer -- executes tests of HiveServer2 HTTP Server
  */
 public class TestHS2HttpServer {
 
   private static HiveServer2 hiveServer2 = null;
+  private static HiveConf hiveConf = null;
+  private static String metastorePasswd = "61ecbc41cdae3e6b32712a06c73606fa"; //random md5
+  private static Integer webUIPort = null;
 
   @BeforeClass
   public static void beforeTests() throws Exception {
-    HiveConf hiveConf = new HiveConf();
-    hiveConf.setBoolVar(ConfVars.HIVE_IN_TEST, false);
+    webUIPort = MetaStoreUtils.findFreePortExcepting(
+        Integer.valueOf(ConfVars.HIVE_SERVER2_WEBUI_PORT.getDefaultValue()));
+    hiveConf = new HiveConf();
+    hiveConf.set(ConfVars.METASTOREPWD.varname, metastorePasswd);
+    hiveConf.set(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname, webUIPort.toString());
     hiveServer2 = new HiveServer2();
     hiveServer2.init(hiveConf);
     hiveServer2.start();
@@ -48,9 +65,8 @@ public class TestHS2HttpServer {
   }
 
   @Test
-  public void testStackServket() throws Exception {
-    String baseURL = "http://localhost:"
-      + ConfVars.HIVE_SERVER2_WEBUI_PORT.getDefaultValue() + "/stacks";
+  public void testStackServlet() throws Exception {
+    String baseURL = "http://localhost:" + webUIPort + "/stacks";
     URL url = new URL(baseURL);
     HttpURLConnection conn = (HttpURLConnection) url.openConnection();
     Assert.assertEquals(HttpURLConnection.HTTP_OK, conn.getResponseCode());
@@ -66,6 +82,44 @@ public class TestHS2HttpServer {
     Assert.assertTrue(contents);
   }
 
+  @Test
+  public void testConfStrippedFromWebUI() throws Exception {
+
+    String pwdValFound = null;
+    String pwdKeyFound = null;
+    CloseableHttpClient httpclient = null;
+    try {
+      httpclient = HttpClients.createDefault();
+      HttpGet httpGet = new HttpGet("http://localhost:"+webUIPort+"/conf");
+      CloseableHttpResponse response1 = httpclient.execute(httpGet);
+
+      try {
+        HttpEntity entity1 = response1.getEntity();
+        BufferedReader br = new BufferedReader(new InputStreamReader(entity1.getContent()));
+        String line;
+        while ((line = br.readLine())!= null) {
+          if (line.contains(metastorePasswd)){
+            pwdValFound = line;
+          }
+          if (line.contains(ConfVars.METASTOREPWD.varname)){
+            pwdKeyFound = line;
+          }
+        }
+        EntityUtils.consume(entity1);
+      } finally {
+        response1.close();
+      }
+    } finally {
+      if (httpclient != null){
+        httpclient.close();
+      }
+    }
+
+    assertNotNull(pwdKeyFound);
+    assertNull(pwdValFound);
+  }
+
+
   @AfterClass
   public static void afterTests() throws Exception {
     hiveServer2.stop();