From 48dcb76d2895029d72298b0f81eb0cff71a4ea69 Mon Sep 17 00:00:00 2001 From: Jim Hahn Date: Thu, 5 Jul 2018 10:36:49 -0400 Subject: 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 --- .../controlloop/eventmanager/ControlLoopEventManager.java | 14 ++++++++------ .../eventmanager/ControlLoopEventManagerTest.java | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) (limited to 'controlloop') 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); -- cgit 1.2.3-korg