[ 
https://issues.apache.org/jira/browse/PHOENIX-6950?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Viraj Jasani updated PHOENIX-6950:
----------------------------------
    Fix Version/s: 5.2.0
                   5.1.4

> PhoenixDriver APIs should unlock closeLock only if thread is able to take lock
> ------------------------------------------------------------------------------
>
>                 Key: PHOENIX-6950
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-6950
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Viraj Jasani
>            Assignee: Viraj Jasani
>            Priority: Major
>             Fix For: 5.2.0, 5.1.4
>
>
> The bug surfaces rarely. We take read lock on closeLock as part of 
> PhoenixDriver connect, getQueryServices, getConnectionQueryServices APIs. 
> However, taking the locks is part of try block and we always try to perform 
> the unlock on closeLock as part of finally block.
> If the lock could not be acquired because the current thread was interrupted, 
> we should not be allowed to unlock it. We can resolve this by:
>  # Allow taking read lock outside of try and deal with InterruptedException 
> by throwing SQLException
>  # Use additional arg in PhoenixDriver#lockInterruptibly to ensure whether 
> the lock could not be obtained by the current thread and use the info while 
> unlocking
>  
> {code:java}
> Cause6: java.lang.IllegalMonitorStateException: attempt to unlock read lock, 
> not locked by current thread
> Cause6-StackTrace: at 
> java.base/java.util.concurrent.locks.ReentrantReadWriteLock$Sync.unmatchedUnlockException(ReentrantReadWriteLock.java:448)
> at 
> java.base/java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryReleaseShared(ReentrantReadWriteLock.java:432)
> at 
> java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.releaseShared(AbstractQueuedSynchronizer.java:1382)
> at 
> java.base/java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.unlock(ReentrantReadWriteLock.java:897)
> at org.apache.phoenix.jdbc.PhoenixDriver.unlock(PhoenixDriver.java:371)
> at org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:235)
> {code}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to