You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jx...@apache.org on 2015/04/06 18:19:58 UTC
svn commit: r1671573 - in /hive/trunk:
common/src/java/org/apache/hadoop/hive/conf/
service/src/java/org/apache/hive/service/cli/session/
Author: jxiang
Date: Mon Apr 6 16:19:57 2015
New Revision: 1671573
URL: http://svn.apache.org/r1671573
Log:
HIVE-10146: Not count session as idle if query is running
Modified:
hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSession.java
hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java
hive/trunk/service/src/java/org/apache/hive/service/cli/session/SessionManager.java
Modified: hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
URL: http://svn.apache.org/viewvc/hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java?rev=1671573&r1=1671572&r2=1671573&view=diff
==============================================================================
--- hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (original)
+++ hive/trunk/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java Mon Apr 6 16:19:57 2015
@@ -1842,6 +1842,10 @@ public class HiveConf extends Configurat
"Operation will be closed when it's not accessed for this duration of time, which can be disabled by setting to zero value.\n" +
" With positive value, it's checked for operations in terminal state only (FINISHED, CANCELED, CLOSED, ERROR).\n" +
" With negative value, it's checked for all of the operations regardless of state."),
+ HIVE_SERVER2_IDLE_SESSION_CHECK_OPERATION("hive.server2.idle.session.check.operation", false,
+ "Session will be considered to be idle only if there is no activity, and there is no pending operation.\n" +
+ "This setting takes effect only if session idle timeout (hive.server2.idle.session.timeout) and checking\n" +
+ "(hive.server2.session.check.interval) are enabled."),
HIVE_CONF_RESTRICTED_LIST("hive.conf.restricted.list",
"hive.security.authenticator.manager,hive.security.authorization.manager,hive.users.in.admin.role",
Modified: hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSession.java
URL: http://svn.apache.org/viewvc/hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSession.java?rev=1671573&r1=1671572&r2=1671573&view=diff
==============================================================================
--- hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSession.java (original)
+++ hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSession.java Mon Apr 6 16:19:57 2015
@@ -151,4 +151,6 @@ public interface HiveSession extends Hiv
throws HiveSQLException;
void closeExpiredOperations();
+
+ long getNoOperationTime();
}
Modified: hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java
URL: http://svn.apache.org/viewvc/hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java?rev=1671573&r1=1671572&r2=1671573&view=diff
==============================================================================
--- hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java (original)
+++ hive/trunk/service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java Mon Apr 6 16:19:57 2015
@@ -91,6 +91,7 @@ public class HiveSessionImpl implements
private boolean isOperationLogEnabled;
private File sessionLogDir;
private volatile long lastAccessTime;
+ private volatile long lastIdleTime;
public HiveSessionImpl(TProtocolVersion protocol, String username, String password,
HiveConf serverhiveConf, String ipAddress) {
@@ -147,6 +148,7 @@ public class HiveSessionImpl implements
configureSession(sessionConfMap);
}
lastAccessTime = System.currentTimeMillis();
+ lastIdleTime = lastAccessTime;
}
/**
@@ -295,6 +297,11 @@ public class HiveSessionImpl implements
if (userAccess) {
lastAccessTime = System.currentTimeMillis();
}
+ if (opHandleSet.isEmpty()) {
+ lastIdleTime = System.currentTimeMillis();
+ } else {
+ lastIdleTime = 0;
+ }
}
@Override
@@ -605,6 +612,11 @@ public class HiveSessionImpl implements
}
}
+ @Override
+ public long getNoOperationTime() {
+ return lastIdleTime > 0 ? System.currentTimeMillis() - lastIdleTime : 0;
+ }
+
private void closeTimedOutOperations(List<Operation> operations) {
acquire(false);
try {
Modified: hive/trunk/service/src/java/org/apache/hive/service/cli/session/SessionManager.java
URL: http://svn.apache.org/viewvc/hive/trunk/service/src/java/org/apache/hive/service/cli/session/SessionManager.java?rev=1671573&r1=1671572&r2=1671573&view=diff
==============================================================================
--- hive/trunk/service/src/java/org/apache/hive/service/cli/session/SessionManager.java (original)
+++ hive/trunk/service/src/java/org/apache/hive/service/cli/session/SessionManager.java Mon Apr 6 16:19:57 2015
@@ -62,6 +62,7 @@ public class SessionManager extends Comp
private long checkInterval;
private long sessionTimeout;
+ private boolean checkOperation;
private volatile boolean shutdown;
// The HiveServer2 instance running this service
@@ -107,6 +108,8 @@ public class SessionManager extends Comp
hiveConf, ConfVars.HIVE_SERVER2_SESSION_CHECK_INTERVAL, TimeUnit.MILLISECONDS);
sessionTimeout = HiveConf.getTimeVar(
hiveConf, ConfVars.HIVE_SERVER2_IDLE_SESSION_TIMEOUT, TimeUnit.MILLISECONDS);
+ checkOperation = HiveConf.getBoolVar(hiveConf,
+ ConfVars.HIVE_SERVER2_IDLE_SESSION_CHECK_OPERATION);
}
private void initOperationLogRootDir() {
@@ -155,7 +158,8 @@ public class SessionManager extends Comp
for (sleepInterval(interval); !shutdown; sleepInterval(interval)) {
long current = System.currentTimeMillis();
for (HiveSession session : new ArrayList<HiveSession>(handleToSession.values())) {
- if (sessionTimeout > 0 && session.getLastAccessTime() + sessionTimeout <= current) {
+ if (sessionTimeout > 0 && session.getLastAccessTime() + sessionTimeout <= current
+ && (!checkOperation || session.getNoOperationTime() > sessionTimeout)) {
SessionHandle handle = session.getSessionHandle();
LOG.warn("Session " + handle + " is Timed-out (last access : " +
new Date(session.getLastAccessTime()) + ") and will be closed");