summaryrefslogtreecommitdiffstats
path: root/controlloop/common/guard
diff options
context:
space:
mode:
Diffstat (limited to 'controlloop/common/guard')
-rw-r--r--controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuard.java75
1 files changed, 44 insertions, 31 deletions
diff --git a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuard.java b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuard.java
index e4fd27415..a7b4f73f2 100644
--- a/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuard.java
+++ b/controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuard.java
@@ -81,60 +81,73 @@ public class PolicyGuard {
}
/**
- * Lock a target.
+ * Create a lock.
*
* @param targetType the target type
* @param targetInstance the target instance
* @param requestID the request Id
- * @param callback the LockCallback
- * @param holdSec maximum number of seconds to hold the lock
- * @return the LockResult
+ * @return the TargetLock
* @throws IllegalArgumentException if an argument is null
*/
- public static LockResult<GuardResult, TargetLock> lockTarget(TargetType targetType, String targetInstance,
- UUID requestID, LockCallback callback, int holdSec) {
-
- String owner = makeOwner(targetType, requestID);
-
- boolean result = factory.getManager().lock(targetInstance, owner, holdSec);
- if (!result) {
- return LockResult.createLockResult(GuardResult.LOCK_DENIED, null);
- }
-
- TargetLock lock = null;
+ public static TargetLock createTargetLock(TargetType targetType, String targetInstance,
+ UUID requestID, LockCallback callback) {
switch (targetType) {
case PNF:
//
// Create the Lock object
//
- lock = new PNFTargetLock(targetType, targetInstance, requestID, callback);
- break;
+ return new PNFTargetLock(targetType, targetInstance, requestID, callback);
case VM:
//
// Create the Lock object
//
- lock = new VMTargetLock(targetType, targetInstance, requestID, callback);
- break;
+ return new VMTargetLock(targetType, targetInstance, requestID, callback);
case VNF:
//
// Create the Lock object
//
- lock = new VNFTargetLock(targetType, targetInstance, requestID, callback);
- break;
-
+ return new VNFTargetLock(targetType, targetInstance, requestID, callback);
default:
logger.error("invalid target type {} for lock on {}", targetType, targetInstance);
- factory.getManager().unlock(targetInstance, owner);
- return LockResult.createLockResult(GuardResult.LOCK_EXCEPTION, null);
+ return null;
}
-
- //
- // Return result
- //
- logger.debug("Locked {}", lock);
- return LockResult.createLockResult(GuardResult.LOCK_ACQUIRED, lock);
}
-
+
+ /**
+ * Lock a target.
+ *
+ * @param targetType the target type
+ * @param targetInstance the target instance
+ * @param requestID the request Id
+ * @param callback the LockCallback
+ * @param holdSec maximum number of seconds to hold the lock
+ * @return the LockResult
+ * @throws IllegalArgumentException if an argument is null
+ */
+ public static LockResult<GuardResult, TargetLock> lockTarget(TargetType targetType, String targetInstance,
+ UUID requestID, LockCallback callback, int holdSec) {
+ String owner = makeOwner(targetType, requestID);
+ boolean result = factory.getManager().lock(targetInstance, owner, holdSec);
+ if (!result) {
+ return LockResult.createLockResult(GuardResult.LOCK_DENIED, null);
+ }
+
+ TargetLock lock = createTargetLock(targetType, targetInstance, requestID, callback);
+ if (lock == null) {
+ //
+ // Bad lock type: unlock and return exception result
+ //
+ factory.getManager().unlock(targetInstance, owner);
+ return LockResult.createLockResult(GuardResult.LOCK_EXCEPTION, null);
+ } else {
+ //
+ // Return result
+ //
+ logger.debug("Locked {}", lock);
+ return LockResult.createLockResult(GuardResult.LOCK_ACQUIRED, lock);
+ }
+ }
+
/**
* Extends a lock on a target.
* @param lock current lock