Repository: hive Updated Branches: refs/heads/master 53a146fbf -> e7cee3001
HIVE-19813: SessionState.start don't have to be synchronized (Daniel Dai, reviewed by Sergey Shelukhin) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/e7cee300 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/e7cee300 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/e7cee300 Branch: refs/heads/master Commit: e7cee300114b2f54b3912d5aa92043d3bdf295b6 Parents: 53a146f Author: Daniel Dai <[email protected]> Authored: Mon Jun 11 23:37:06 2018 -0700 Committer: Daniel Dai <[email protected]> Committed: Mon Jun 11 23:37:06 2018 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/hive/ql/session/SessionState.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/e7cee300/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java index a081bef..6ff8f99 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java @@ -42,6 +42,7 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.CancellationException; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantLock; import org.apache.commons.lang.StringUtils; @@ -161,7 +162,7 @@ public class SessionState { /** * The flag to indicate if the session already started so we can skip the init */ - private boolean isStarted = false; + private AtomicBoolean isStarted = new AtomicBoolean(false); /* * HiveHistory Object */ @@ -601,13 +602,14 @@ public class SessionState { startSs.tezSessionState.endOpen(); } - synchronized private static void start(SessionState startSs, boolean isAsync, LogHelper console) { + private static void start(SessionState startSs, boolean isAsync, LogHelper console) { setCurrentSessionState(startSs); - if (startSs.isStarted) { - return; + synchronized(SessionState.class) { + if (!startSs.isStarted.compareAndSet(false, true)) { + return; + } } - startSs.isStarted = true; if (startSs.hiveHist == null){ if (startSs.getConf().getBoolVar(HiveConf.ConfVars.HIVE_SESSION_HISTORY_ENABLED)) {
