[
https://issues.apache.org/jira/browse/HIVE-27201?focusedWorklogId=858813&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-858813
]
ASF GitHub Bot logged work on HIVE-27201:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 25/Apr/23 01:02
Start Date: 25/Apr/23 01:02
Worklog Time Spent: 10m
Work Description: dengzhhu653 commented on code in PR #4180:
URL: https://github.com/apache/hive/pull/4180#discussion_r1175916767
##########
service/src/java/org/apache/hive/service/cli/session/HiveSessionImpl.java:
##########
@@ -401,11 +401,11 @@ private synchronized void acquireAfterOpLock(boolean
userAccess) {
// set the thread name with the logging prefix.
sessionState.updateThreadName();
- try {
- setSessionHive();
- } catch (HiveSQLException e) {
- throw new RuntimeException(e);
- }
+ // If Hive.get() is being shared across different sessions,
+ // sessionHive and Hive.get() may be different, in such case,
+ // the risk of deadlock on HiveMetaStoreClient#SynchronizedHandler can
happen.
+ // Refresh the thread-local Hive to avoid the deadlock.
+ Hive.set(sessionHive);
Review Comment:
It's true because the `sessionHive` is bound to the session when created,
but the thread-local hive doesn't getting updated, so there is a chance that
the thread-local hive is being shared across sessions.
I wrote a test to repro the problem:
[TestHS2SessionHive.java](https://github.com/apache/hive/pull/4180/files#diff-04289a8e507a029093af5ebd19501996c040fd7691d500abea665e706cb5c224),
it can reoccur without the fix.
Issue Time Tracking
-------------------
Worklog Id: (was: 858813)
Time Spent: 6h 10m (was: 6h)
> Inconsistency between session Hive and thread-local Hive may cause HS2
> deadlock
> -------------------------------------------------------------------------------
>
> Key: HIVE-27201
> URL: https://issues.apache.org/jira/browse/HIVE-27201
> Project: Hive
> Issue Type: Bug
> Components: HiveServer2
> Reporter: Zhihua Deng
> Assignee: Zhihua Deng
> Priority: Major
> Labels: pull-request-available
> Time Spent: 6h 10m
> Remaining Estimate: 0h
>
> The HiveServer2’s server handler can switch to process the operation from
> other session, in such case, the Hive cached in ThreadLocal is not the same
> as the Hive in SessionState, and can be referenced by another session.
> If the two handlers swap their sessions to process the DatabaseMetaData
> request, and the HiveMetastoreClientFactory obtains the Hive via Hive.get(),
> then there is a chance that the deadlock can happen.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)