From 3474fad00e780e279976921d60376d8d86b953c0 Mon Sep 17 00:00:00 2001 From: Stan Bonev Date: Tue, 30 Oct 2018 10:02:42 -0400 Subject: RA: Add timeout parameters to the lock API Change-Id: I5f8cd856d245829036ed563969fe75887e443467 Issue-ID: CCSDK-642 Signed-off-by: Stan Bonev --- .../org/onap/ccsdk/sli/adaptors/lock/comp/LockHelper.java | 8 ++++++-- .../onap/ccsdk/sli/adaptors/lock/comp/LockHelperImpl.java | 14 ++++++++++++-- .../org/onap/ccsdk/sli/adaptors/ra/ResourceLockNode.java | 12 ++++++++++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/comp/LockHelper.java b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/comp/LockHelper.java index d33703df..040d1927 100644 --- a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/comp/LockHelper.java +++ b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/comp/LockHelper.java @@ -8,9 +8,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -27,9 +27,13 @@ public interface LockHelper { void lock(String resourceName, String lockRequester, int lockTimeout /* Seconds */); + void lock(String resourceName, String lockRequester, int lockTimeout /* Seconds */, int lockWait /* Seconds */, int retryCount); + void unlock(String resourceName, boolean force); void lock(Collection resourceNameList, String lockRequester, int lockTimeout /* Seconds */); + void lock(Collection resourceNameList, String lockRequester, int lockTimeout /* Seconds */, int lockWait /* Seconds */, int retryCount); + void unlock(Collection resourceNameList, boolean force); } diff --git a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/comp/LockHelperImpl.java b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/comp/LockHelperImpl.java index 3a8c730e..1611b537 100644 --- a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/comp/LockHelperImpl.java +++ b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/comp/LockHelperImpl.java @@ -41,7 +41,12 @@ public class LockHelperImpl implements LockHelper { @Override public void lock(String resourceName, String lockRequester, int lockTimeout /* Seconds */) { - lock(Collections.singleton(resourceName), lockRequester, lockTimeout); + lock(resourceName, lockRequester, lockTimeout, lockWait, retryCount); + } + + @Override + public void lock(String resourceName, String lockRequester, int lockTimeout /* Seconds */, int lockWait /* Seconds */, int retryCount) { + lock(Collections.singleton(resourceName), lockRequester, lockTimeout, lockWait, retryCount); } @Override @@ -51,13 +56,18 @@ public class LockHelperImpl implements LockHelper { @Override public void lock(Collection resourceNameList, String lockRequester, int lockTimeout /* Seconds */) { + lock(resourceNameList, lockRequester, lockTimeout, lockWait, retryCount); + } + + @Override + public void lock(Collection resourceNameList, String lockRequester, int lockTimeout /* Seconds */, int lockWait /* Seconds */, int retryCount) { for (int i = 0; true; i++) { try { tryLock(resourceNameList, lockRequester, lockTimeout); log.info("Resources locked: " + resourceNameList); return; } catch (ResourceLockedException e) { - if (i > retryCount) { + if (i >= retryCount) { throw e; } try { diff --git a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/ResourceLockNode.java b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/ResourceLockNode.java index d1ba1eb7..a7d4b0e2 100644 --- a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/ResourceLockNode.java +++ b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/ResourceLockNode.java @@ -45,8 +45,12 @@ public class ResourceLockNode implements SvcLogicJavaPlugin { String lockRequester = getParam(paramMap, "lock-requester", false, generateLockRequester()); String lockTimeoutStr = getParam(paramMap, "lock-timeout", false, "600"); // Default lock timeout: 10 min int lockTimeout = Integer.parseInt(lockTimeoutStr); + String lockWaitStr = getParam(paramMap, "lock-wait", false, "5"); // Time waiting before next retry. Default: 5 sec + int lockWait = Integer.parseInt(lockWaitStr); + String lockRetryCountStr = getParam(paramMap, "lock-retry-count", false, "10"); // Default: 10 retries + int lockRetryCount = Integer.parseInt(lockRetryCountStr); - lockHelper.lock(resourceName, lockRequester, lockTimeout); + lockHelper.lock(resourceName, lockRequester, lockTimeout, lockWait, lockRetryCount); } public void unlockResource(Map paramMap, SvcLogicContext ctx) throws SvcLogicException { @@ -56,6 +60,10 @@ public class ResourceLockNode implements SvcLogicJavaPlugin { } public void lockResource(String resourceName, String lockRequester, int lockTimeout /* sec */) { + lockResource(resourceName, lockRequester, lockTimeout, 5, 10); + } + + public void lockResource(String resourceName, String lockRequester, int lockTimeout /* sec */, int lockWait /* Seconds */, int retryCount) { if (lockRequester == null) { lockRequester = generateLockRequester(); } @@ -63,7 +71,7 @@ public class ResourceLockNode implements SvcLogicJavaPlugin { lockTimeout = 600; } - lockHelper.lock(resourceName, lockRequester, lockTimeout); + lockHelper.lock(resourceName, lockRequester, lockTimeout, lockWait, retryCount); } public void unlockResource(String resourceName) { -- cgit 1.2.3-korg