You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@oozie.apache.org by "Azrael Seoeun (JIRA)" <ji...@apache.org> on 2015/06/20 18:16:00 UTC

[jira] [Updated] (OOZIE-1922) MemoryLocksService fails if lock is acquired multiple times in same thread and released

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

Azrael Seoeun updated OOZIE-1922:
---------------------------------
    Attachment: OOZIE-1922.2.patch

Upload new patch rebased on the latest branch.

> MemoryLocksService fails if lock is acquired multiple times in same thread and released
> ---------------------------------------------------------------------------------------
>
>                 Key: OOZIE-1922
>                 URL: https://issues.apache.org/jira/browse/OOZIE-1922
>             Project: Oozie
>          Issue Type: Bug
>            Reporter: Purshotam Shah
>            Assignee: Azrael Seoeun
>         Attachments: OOZIE-1922.1.patch, OOZIE-1922.2.patch
>
>
> ReentrantLock can be acquired multiple times in same thread. For multiple acquire call, ReentrantLock hold count is incremented by one.
> So if we acquire lock multiple time from same thread, all will be successful and  hold count is increased for every call.
> But if we release lock, MemoryLocksService ignore the count and deletes the lock. Even if it's held by some command.
> Simple step can reproduce it.
> {code}
>         service.getWriteLock("test", 5000); //writeHoldCount = 1
>         MemoryLockToken lock = (MemoryLockToken)service.getWriteLock("test", 5000); //writeHoldCount = 2
>         lock.release(); //writeHoldCount = 1
>         lock = (MemoryLockToken)service.getWriteLock("test", 5000); //writeHoldCount = 1, it should be 2.
> {code}
> {code}
>         @Override
>         public void release() {
>             int val = rwLock.getQueueLength();
>             if (val == 0) {
>                 synchronized (locks) {
>                     locks.remove(resource);
>                 }
>             }
>             lock.unlock();
>         }
>     }
> {code}
> MemoryLocks should check hold count before removing lock.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)