diff --git service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java index 54ee567..7341635 100644 --- service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java +++ service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java @@ -113,6 +113,7 @@ private volatile long lastAccessTime; private volatile long lastIdleTime; + private volatile int pendingCount = 0; public HiveSessionImpl(SessionHandle sessionHandle, TProtocolVersion protocol, String username, String password, @@ -336,6 +337,8 @@ protected synchronized void acquire(boolean userAccess) { // set the thread name with the logging prefix. sessionState.updateThreadName(); Hive.set(sessionHive); + pendingCount++; + lastIdleTime = 0; } /** @@ -361,10 +364,11 @@ protected synchronized void release(boolean userAccess) { if (userAccess) { lastAccessTime = System.currentTimeMillis(); } - if (opHandleSet.isEmpty()) { + pendingCount--; + // lastIdleTime is only set by the last one + // who calls release with empty opHandleSet. + if (pendingCount == 0 && opHandleSet.isEmpty()) { lastIdleTime = System.currentTimeMillis(); - } else { - lastIdleTime = 0; } }