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