[ 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)