diff options
author | Jim Hahn <jrh3@att.com> | 2018-07-05 10:36:49 -0400 |
---|---|---|
committer | Jim Hahn <jrh3@att.com> | 2018-07-05 10:36:49 -0400 |
commit | 48dcb76d2895029d72298b0f81eb0cff71a4ea69 (patch) | |
tree | d427a5e6a11da3e509dc145d078428ec7d601f90 /controlloop/common/eventmanager/src | |
parent | cecd4ac43f199ad9f020d38fb7d1651b296d1703 (diff) |
unlock should always return TargetLock
ControlLoopEventManager.unlock only returns the TargetLock if
the PolicyGuard.unlock operation is successful. However, if
the lock has already expired, then PolicyGuard.unlock will return
false, and ControlLoopEventManager.unlock will then return null.
As a result, the rules do not retract the TargetLock. (The rules
do, however, retract any left-over TargetLock objects during the
clean-up phase. Nevertheless, the earlier rules should not have
to depend on the clean-up rules to do that.)
Modified the code to address this issue.
Change-Id: I2e6099a4e3511053d2e6e1373cae4b480798d1b6
Issue-ID: POLICY-872
Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'controlloop/common/eventmanager/src')
2 files changed, 9 insertions, 7 deletions
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java index 5f36bcc20..4817bec40 100644 --- a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java +++ b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java @@ -486,12 +486,14 @@ public class ControlLoopEventManager implements LockCallback, Serializable { if (this.targetLock == null) { return null; } - if (PolicyGuard.unlockTarget(this.targetLock)) { - TargetLock returnLock = this.targetLock; - this.targetLock = null; - return returnLock; - } - return null; + + TargetLock returnLock = this.targetLock; + this.targetLock = null; + + PolicyGuard.unlockTarget(returnLock); + + // always return the old target lock so rules can retract it + return returnLock; } public enum NEW_EVENT_STATUS { diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java index 1af4a312d..02dda2048 100644 --- a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java +++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java @@ -768,7 +768,7 @@ public class ControlLoopEventManagerTest { lockLock = manager.lockCurrentOperation(); assertNotNull(lockLock); PolicyGuard.unlockTarget(lockLock.getB()); - assertNull(manager.unlockCurrentOperation()); + assertEquals(lockLock.getB(), manager.unlockCurrentOperation()); clom.startOperation(event); |