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 f5d7ec0..1dd5308 100644 --- service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java +++ service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java @@ -384,12 +384,12 @@ private synchronized void acquireAfterOpLock(boolean userAccess) { sessionState.setIsUsingThriftJDBCBinarySerDe(updateIsUsingThriftJDBCBinarySerDe()); if (userAccess) { lastAccessTime = System.currentTimeMillis(); + lastIdleTime = 0; } // set the thread name with the logging prefix. sessionState.updateThreadName(); Hive.set(sessionHive); activeCalls++; - lastIdleTime = 0; } /** @@ -422,14 +422,10 @@ private synchronized void releaseBeforeOpLock(boolean userAccess) { (ThreadWithGarbageCleanup) ThreadWithGarbageCleanup.currentThread(); currentThread.cacheThreadLocalRawStore(); } + activeCalls--; if (userAccess) { lastAccessTime = System.currentTimeMillis(); - } - activeCalls--; - // lastIdleTime is only set by the last one - // who calls release with empty opHandleSet. - if (activeCalls == 0 && opHandleSet.isEmpty()) { - lastIdleTime = System.currentTimeMillis(); + lastIdleTime = lastAccessTime; } } @@ -830,16 +826,18 @@ public void closeExpiredOperations() { @Override public long getNoOperationTime() { - return lastIdleTime > 0 ? System.currentTimeMillis() - lastIdleTime : 0; + boolean noMoreOpHandle = false; + synchronized (opHandleSet) { + noMoreOpHandle = opHandleSet.isEmpty(); + } + return noMoreOpHandle && lastIdleTime > 0 ? System.currentTimeMillis() - lastIdleTime : 0; } private void closeTimedOutOperations(List operations) { acquire(false, false); try { for (Operation operation : operations) { - synchronized (opHandleSet) { - opHandleSet.remove(operation.getHandle()); - } + removeOpHandle(operation.getHandle()); try { operation.close(); } catch (Exception e) {