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

Kezhu Wang closed CURATOR-486.
------------------------------
    Resolution: Not A Problem

Curator uses {{Guaranteeable.guaranteed}} in deleting lock path. In case of 
exception, it will try the deletion in background. So the result is that:
* If session expired, the lock path will be deleted by zk.
* If session not expired, curator will delete it finally in background.
Basically, {{InterProcessMutex.release}} don't supposed to be retried. I rarely 
saw retry-able lock release in case of error.

> InterProcessMutex.release fails to remove a lock on retries.
> ------------------------------------------------------------
>
>                 Key: CURATOR-486
>                 URL: https://issues.apache.org/jira/browse/CURATOR-486
>             Project: Apache Curator
>          Issue Type: Bug
>            Reporter: Purshotam Shah
>            Assignee: Jordan Zimmerman
>            Priority: Major
>
> We were planning to build a release lock retry, looks like 
> InterProcessMutex.release don't support it.
> It removes currentThread entry from threadData, even if there is an issue 
> releasing lock.
> {code:title=InterProcessMutex.java}
>    @Override
>     public void release() throws Exception
>     {
>         /*
>             Note on concurrency: a given lockData instance
>             can be only acted on by a single thread so locking isn't necessary
>          */
>         Thread      currentThread = Thread.currentThread();
>         LockData    lockData = threadData.get(currentThread);
>         if ( lockData == null )
>         {
>             throw new IllegalMonitorStateException("You do not own the lock: 
> " + basePath);
>         }
>         int newLockCount = lockData.lockCount.decrementAndGet();
>         if ( newLockCount > 0 )
>         {
>             return;
>         }
>         if ( newLockCount < 0 )
>         {
>             throw new IllegalMonitorStateException("Lock count has gone 
> negative for lock: " + basePath);
>         }
>         try
>         {
>             internals.releaseLock(lockData.lockPath);
>         }
>         finally
>         {
>             threadData.remove(currentThread);
>         }
>     }
> {code}



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

Reply via email to