You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by se...@apache.org on 2016/10/01 01:09:03 UTC
[21/44] hive git commit: HIVE-14817. Shutdown the SessionManager
timeoutChecker thread properly upon shutdown. (Siddharth Seth,
reviewed by Thejas Nair)
HIVE-14817. Shutdown the SessionManager timeoutChecker thread properly upon shutdown. (Siddharth Seth, reviewed by Thejas Nair)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/e08d94e5
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/e08d94e5
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/e08d94e5
Branch: refs/heads/hive-14535
Commit: e08d94e57d99245ebaa90c4be69dade84ba27172
Parents: 990927e
Author: Siddharth Seth <ss...@apache.org>
Authored: Fri Sep 23 14:56:57 2016 -0700
Committer: Siddharth Seth <ss...@apache.org>
Committed: Fri Sep 23 14:56:57 2016 -0700
----------------------------------------------------------------------
.../service/cli/session/SessionManager.java | 33 +++++++++++++++-----
1 file changed, 25 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/e08d94e5/service/src/java/org/apache/hive/service/cli/session/SessionManager.java
----------------------------------------------------------------------
diff --git a/service/src/java/org/apache/hive/service/cli/session/SessionManager.java b/service/src/java/org/apache/hive/service/cli/session/SessionManager.java
index 15bab06..76e759f 100644
--- a/service/src/java/org/apache/hive/service/cli/session/SessionManager.java
+++ b/service/src/java/org/apache/hive/service/cli/session/SessionManager.java
@@ -185,14 +185,20 @@ public class SessionManager extends CompositeService {
}
}
+ private final Object timeoutCheckerLock = new Object();
+
private void startTimeoutChecker() {
final long interval = Math.max(checkInterval, 3000l); // minimum 3 seconds
- Runnable timeoutChecker = new Runnable() {
+ final Runnable timeoutChecker = new Runnable() {
@Override
public void run() {
- for (sleepInterval(interval); !shutdown; sleepInterval(interval)) {
+ sleepFor(interval);
+ while (!shutdown) {
long current = System.currentTimeMillis();
for (HiveSession session : new ArrayList<HiveSession>(handleToSession.values())) {
+ if (shutdown) {
+ break;
+ }
if (sessionTimeout > 0 && session.getLastAccessTime() + sessionTimeout <= current
&& (!checkOperation || session.getNoOperationTime() > sessionTimeout)) {
SessionHandle handle = session.getSessionHandle();
@@ -207,24 +213,35 @@ public class SessionManager extends CompositeService {
session.closeExpiredOperations();
}
}
+ sleepFor(interval);
}
}
- private void sleepInterval(long interval) {
- try {
- Thread.sleep(interval);
- } catch (InterruptedException e) {
- // ignore
+ private void sleepFor(long interval) {
+ synchronized (timeoutCheckerLock) {
+ try {
+ timeoutCheckerLock.wait(interval);
+ } catch (InterruptedException e) {
+ // Ignore, and break.
+ }
}
}
};
backgroundOperationPool.execute(timeoutChecker);
}
+ private void shutdownTimeoutChecker() {
+ shutdown = true;
+ synchronized (timeoutCheckerLock) {
+ timeoutCheckerLock.notify();
+ }
+ }
+
+
@Override
public synchronized void stop() {
super.stop();
- shutdown = true;
+ shutdownTimeoutChecker();
if (backgroundOperationPool != null) {
backgroundOperationPool.shutdown();
long timeout = hiveConf.getTimeVar(