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();