You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by vg...@apache.org on 2014/10/07 20:50:06 UTC

svn commit: r1629950 - in /hive/branches/branch-0.14/service/src: java/org/apache/hive/service/cli/ java/org/apache/hive/service/cli/session/ java/org/apache/hive/service/cli/thrift/ java/org/apache/hive/service/server/ test/org/apache/hive/service/aut...

Author: vgumashta
Date: Tue Oct  7 18:50:06 2014
New Revision: 1629950

URL: http://svn.apache.org/r1629950
Log:
HIVE-8193: Hook HiveServer2 dynamic service discovery with session time out. (Vaibhav Gumashta reviewed by Thejas Nair)

Modified:
    hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/CLIService.java
    hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/session/SessionManager.java
    hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/thrift/EmbeddedThriftBinaryCLIService.java
    hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIService.java
    hive/branches/branch-0.14/service/src/java/org/apache/hive/service/server/HiveServer2.java
    hive/branches/branch-0.14/service/src/test/org/apache/hive/service/auth/TestPlainSaslHelper.java
    hive/branches/branch-0.14/service/src/test/org/apache/hive/service/cli/session/TestSessionGlobalInitFile.java

Modified: hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/CLIService.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/CLIService.java?rev=1629950&r1=1629949&r2=1629950&view=diff
==============================================================================
--- hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/CLIService.java (original)
+++ hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/CLIService.java Tue Oct  7 18:50:06 2014
@@ -44,6 +44,7 @@ import org.apache.hive.service.auth.Hive
 import org.apache.hive.service.cli.operation.Operation;
 import org.apache.hive.service.cli.session.SessionManager;
 import org.apache.hive.service.cli.thrift.TProtocolVersion;
+import org.apache.hive.service.server.HiveServer2;
 
 /**
  * CLIService.
@@ -64,15 +65,18 @@ public class CLIService extends Composit
   private SessionManager sessionManager;
   private UserGroupInformation serviceUGI;
   private UserGroupInformation httpUGI;
+  // The HiveServer2 instance running this service
+  private final HiveServer2 hiveServer2;
 
-  public CLIService() {
+  public CLIService(HiveServer2 hiveServer2) {
     super(CLIService.class.getSimpleName());
+    this.hiveServer2 = hiveServer2;
   }
 
   @Override
   public synchronized void init(HiveConf hiveConf) {
     this.hiveConf = hiveConf;
-    sessionManager = new SessionManager();
+    sessionManager = new SessionManager(hiveServer2);
     addService(sessionManager);
     //  If the hadoop cluster is secure, do a kerberos login for the service from the keytab
     if (ShimLoader.getHadoopShims().isSecurityEnabled()) {
@@ -201,7 +205,8 @@ public class CLIService extends Composit
    * @see org.apache.hive.service.cli.ICLIService#closeSession(org.apache.hive.service.cli.SessionHandle)
    */
   @Override
-  public void closeSession(SessionHandle sessionHandle) throws HiveSQLException {
+  public void closeSession(SessionHandle sessionHandle)
+      throws HiveSQLException {
     sessionManager.closeSession(sessionHandle);
     LOG.debug(sessionHandle + ": closeSession()");
   }

Modified: hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/session/SessionManager.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/session/SessionManager.java?rev=1629950&r1=1629949&r2=1629950&view=diff
==============================================================================
--- hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/session/SessionManager.java (original)
+++ hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/session/SessionManager.java Tue Oct  7 18:50:06 2014
@@ -43,6 +43,7 @@ import org.apache.hive.service.cli.HiveS
 import org.apache.hive.service.cli.SessionHandle;
 import org.apache.hive.service.cli.operation.OperationManager;
 import org.apache.hive.service.cli.thrift.TProtocolVersion;
+import org.apache.hive.service.server.HiveServer2;
 import org.apache.hive.service.server.ThreadFactoryWithGarbageCleanup;
 
 /**
@@ -65,9 +66,12 @@ public class SessionManager extends Comp
   private long sessionTimeout;
 
   private volatile boolean shutdown;
+  // The HiveServer2 instance running this service
+  private final HiveServer2 hiveServer2;
 
-  public SessionManager() {
+  public SessionManager(HiveServer2 hiveServer2) {
     super(SessionManager.class.getSimpleName());
+    this.hiveServer2 = hiveServer2;
   }
 
   @Override
@@ -232,10 +236,10 @@ public class SessionManager extends Comp
   /**
    * Opens a new session and creates a session handle.
    * The username passed to this method is the effective username.
-   * If withImpersonation is true (==doAs true) we wrap all the calls in HiveSession 
+   * If withImpersonation is true (==doAs true) we wrap all the calls in HiveSession
    * within a UGI.doAs, where UGI corresponds to the effective user.
-   * @see org.apache.hive.service.cli.thrift.ThriftCLIService#getUserName() 
-   * 
+   * @see org.apache.hive.service.cli.thrift.ThriftCLIService#getUserName()
+   *
    * @param protocol
    * @param username
    * @param password
@@ -288,6 +292,24 @@ public class SessionManager extends Comp
       throw new HiveSQLException("Session does not exist!");
     }
     session.close();
+    // Shutdown HiveServer2 if it has been deregistered from ZooKeeper and has no active sessions
+    if (!(hiveServer2 == null) && (hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_SUPPORT_DYNAMIC_SERVICE_DISCOVERY))
+        && (!hiveServer2.isRegisteredWithZooKeeper())) {
+      // Asynchronously shutdown this instance of HiveServer2,
+      // if there are no active client sessions
+      if (getOpenSessionCount() == 0) {
+        LOG.info("This instance of HiveServer2 has been removed from the list of server "
+            + "instances available for dynamic service discovery. "
+            + "The last client session has ended - will shutdown now.");
+        Thread shutdownThread = new Thread() {
+          @Override
+          public void run() {
+            hiveServer2.stop();
+          }
+        };
+        shutdownThread.start();
+      }
+    }
   }
 
   public HiveSession getSession(SessionHandle sessionHandle) throws HiveSQLException {
@@ -376,6 +398,5 @@ public class SessionManager extends Comp
   public int getOpenSessionCount() {
     return handleToSession.size();
   }
-
 }
 

Modified: hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/thrift/EmbeddedThriftBinaryCLIService.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/thrift/EmbeddedThriftBinaryCLIService.java?rev=1629950&r1=1629949&r2=1629950&view=diff
==============================================================================
--- hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/thrift/EmbeddedThriftBinaryCLIService.java (original)
+++ hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/thrift/EmbeddedThriftBinaryCLIService.java Tue Oct  7 18:50:06 2014
@@ -30,7 +30,7 @@ import org.apache.hive.service.cli.ICLIS
 public class EmbeddedThriftBinaryCLIService extends ThriftBinaryCLIService {
 
   public EmbeddedThriftBinaryCLIService() {
-    super(new CLIService());
+    super(new CLIService(null));
     isEmbedded = true;
     HiveConf.setLoadHiveServer2Config(true);
     cliService.init(new HiveConf());

Modified: hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIService.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIService.java?rev=1629950&r1=1629949&r2=1629950&view=diff
==============================================================================
--- hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIService.java (original)
+++ hive/branches/branch-0.14/service/src/java/org/apache/hive/service/cli/thrift/ThriftCLIService.java Tue Oct  7 18:50:06 2014
@@ -66,7 +66,6 @@ public abstract class ThriftCLIService e
   protected int minWorkerThreads;
   protected int maxWorkerThreads;
   protected long workerKeepAliveTime;
-  private HiveServer2 hiveServer2;
 
   public ThriftCLIService(CLIService cliService, String serviceName) {
     super(serviceName);
@@ -264,9 +263,9 @@ public abstract class ThriftCLIService e
 
   /**
    * Returns the effective username.
-   * 1. If hive.server2.allow.user.substitution = false: the username of the connecting user 
+   * 1. If hive.server2.allow.user.substitution = false: the username of the connecting user
    * 2. If hive.server2.allow.user.substitution = true: the username of the end user,
-   * that the connecting user is trying to proxy for. 
+   * that the connecting user is trying to proxy for.
    * This includes a check whether the connecting user is allowed to proxy for the end user.
    * @param req
    * @return
@@ -366,24 +365,6 @@ public abstract class ThriftCLIService e
     } catch (Exception e) {
       LOG.warn("Error closing session: ", e);
       resp.setStatus(HiveSQLException.toTStatus(e));
-    } finally {
-      if (!(isEmbedded) && (hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_SUPPORT_DYNAMIC_SERVICE_DISCOVERY))
-          && (!hiveServer2.isRegisteredWithZooKeeper())) {
-        // Asynchronously shutdown this instance of HiveServer2,
-        // if there are no active client sessions
-        if (cliService.getSessionManager().getOpenSessionCount() == 0) {
-          LOG.info("This instance of HiveServer2 has been removed from the list of server "
-              + "instances available for dynamic service discovery. "
-              + "The last client session has ended - will shutdown now.");
-          Thread shutdownThread = new Thread() {
-            @Override
-            public void run() {
-              hiveServer2.stop();
-            }
-          };
-          shutdownThread.start();
-        }
-      }
     }
     return resp;
   }
@@ -666,10 +647,4 @@ public abstract class ThriftCLIService e
     return cliService.getHiveConf().getVar(ConfVars.HIVE_SERVER2_AUTHENTICATION)
         .equalsIgnoreCase(HiveAuthFactory.AuthTypes.KERBEROS.toString());
   }
-
-  public void setHiveServer2(HiveServer2 hiveServer2) {
-    this.hiveServer2 = hiveServer2;
-  }
-
 }
-

Modified: hive/branches/branch-0.14/service/src/java/org/apache/hive/service/server/HiveServer2.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/service/src/java/org/apache/hive/service/server/HiveServer2.java?rev=1629950&r1=1629949&r2=1629950&view=diff
==============================================================================
--- hive/branches/branch-0.14/service/src/java/org/apache/hive/service/server/HiveServer2.java (original)
+++ hive/branches/branch-0.14/service/src/java/org/apache/hive/service/server/HiveServer2.java Tue Oct  7 18:50:06 2014
@@ -64,7 +64,7 @@ public class HiveServer2 extends Composi
 
   @Override
   public synchronized void init(HiveConf hiveConf) {
-    cliService = new CLIService();
+    cliService = new CLIService(this);
     addService(cliService);
     if (isHTTPTransportMode(hiveConf)) {
       thriftCLIService = new ThriftHttpCLIService(cliService);
@@ -72,7 +72,6 @@ public class HiveServer2 extends Composi
       thriftCLIService = new ThriftBinaryCLIService(cliService);
     }
     addService(thriftCLIService);
-    thriftCLIService.setHiveServer2(this);
     super.init(hiveConf);
 
     // Add a shutdown hook for catching SIGTERM & SIGINT

Modified: hive/branches/branch-0.14/service/src/test/org/apache/hive/service/auth/TestPlainSaslHelper.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/service/src/test/org/apache/hive/service/auth/TestPlainSaslHelper.java?rev=1629950&r1=1629949&r2=1629950&view=diff
==============================================================================
--- hive/branches/branch-0.14/service/src/test/org/apache/hive/service/auth/TestPlainSaslHelper.java (original)
+++ hive/branches/branch-0.14/service/src/test/org/apache/hive/service/auth/TestPlainSaslHelper.java Tue Oct  7 18:50:06 2014
@@ -39,7 +39,7 @@ public class TestPlainSaslHelper extends
         hconf.getBoolVar(ConfVars.HIVE_SERVER2_ENABLE_DOAS));
 
 
-    CLIService cliService = new CLIService();
+    CLIService cliService = new CLIService(null);
     cliService.init(hconf);
     ThriftCLIService tcliService = new ThriftBinaryCLIService(cliService);
     tcliService.init(hconf);

Modified: hive/branches/branch-0.14/service/src/test/org/apache/hive/service/cli/session/TestSessionGlobalInitFile.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/service/src/test/org/apache/hive/service/cli/session/TestSessionGlobalInitFile.java?rev=1629950&r1=1629949&r2=1629950&view=diff
==============================================================================
--- hive/branches/branch-0.14/service/src/test/org/apache/hive/service/cli/session/TestSessionGlobalInitFile.java (original)
+++ hive/branches/branch-0.14/service/src/test/org/apache/hive/service/cli/session/TestSessionGlobalInitFile.java Tue Oct  7 18:50:06 2014
@@ -52,7 +52,7 @@ public class TestSessionGlobalInitFile e
    */
   private class FakeEmbeddedThriftBinaryCLIService extends ThriftBinaryCLIService {
     public FakeEmbeddedThriftBinaryCLIService(HiveConf hiveConf) {
-      super(new CLIService());
+      super(new CLIService(null));
       isEmbedded = true;
       cliService.init(hiveConf);
       cliService.start();