Repository: hive Updated Branches: refs/heads/branch-3 bb9a85fa3 -> 0565f64f3
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/0565f64f Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/0565f64f Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/0565f64f Branch: refs/heads/branch-3 Commit: 0565f64f3cedff37b45bd1c94cb56bb270f98e21 Parents: bb9a85f Author: Daniel Dai <[email protected]> Authored: Mon Jun 11 23:37:44 2018 -0700 Committer: Daniel Dai <[email protected]> Committed: Mon Jun 11 23:38:31 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/0565f64f/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 9c52f2b..27b4d37 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; @@ -160,7 +161,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 */ @@ -593,13 +594,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)) {
