diff options
author | Stan Bonev <sb5356@att.com> | 2019-01-10 12:52:58 -0500 |
---|---|---|
committer | Stan Bonev <sb5356@att.com> | 2019-01-10 12:52:58 -0500 |
commit | 0cf282459fe7cf129a390d59d46b6de299ac86db (patch) | |
tree | d096250039ac32b513d9485c72f7ed40758cd208 /resource-assignment | |
parent | f7c24c3dce2845ab17b9cecda15e431123f3832f (diff) |
RA: Fix locking when there is expired lock in DB
Change-Id: I026bdea43c0386689c98902aac95be02e27f7704
Issue-ID: CCSDK-937
Signed-off-by: Stan Bonev <sb5356@att.com>
Diffstat (limited to 'resource-assignment')
4 files changed, 26 insertions, 24 deletions
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 0efd8977a..735d240c0 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 @@ -45,7 +45,8 @@ public class LockHelperImpl implements LockHelper { } @Override - public void lock(String resourceName, String lockRequester, int lockTimeout /* Seconds */, int lockWait /* Seconds */, int retryCount) { + public void lock(String resourceName, String lockRequester, int lockTimeout /* Seconds */, + int lockWait /* Seconds */, int retryCount) { lock(Collections.singleton(resourceName), lockRequester, lockTimeout, lockWait, retryCount); } @@ -60,7 +61,8 @@ public class LockHelperImpl implements LockHelper { } @Override - public void lock(Collection<String> resourceNameList, String lockRequester, int lockTimeout /* Seconds */, int lockWait /* Seconds */, int retryCount) { + public void lock(Collection<String> resourceNameList, String lockRequester, int lockTimeout /* Seconds */, + int lockWait /* Seconds */, int retryCount) { for (int i = 0; true; i++) { try { tryLock(resourceNameList, lockRequester, lockTimeout); @@ -129,6 +131,9 @@ public class LockHelperImpl implements LockHelper { } if (l != null) { + if (now.getTime() > l.expirationTime.getTime() || l.lockCount <= 0) { + l.lockCount = 0; + } dbLockList.add(l); } else { insertLockNameList.add(name); @@ -137,7 +142,7 @@ public class LockHelperImpl implements LockHelper { // Update the lock info in DB for (ResourceLock l : dbLockList) { - resourceLockDao.update(l.id, now, new Date(now.getTime() + lockTimeout * 1000), l.lockCount + 1); + resourceLockDao.update(l.id, lockRequester, now, new Date(now.getTime() + lockTimeout * 1000), l.lockCount + 1); } // Insert records for those that are not yet there @@ -159,7 +164,9 @@ public class LockHelperImpl implements LockHelper { resourceLockDao.commit(); - } finally { + }finally + + { resourceLockDao.rollback(); } } diff --git a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/dao/ResourceLockDao.java b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/dao/ResourceLockDao.java index f9d41135c..dc86f70af 100644 --- a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/dao/ResourceLockDao.java +++ b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/dao/ResourceLockDao.java @@ -28,7 +28,7 @@ public interface ResourceLockDao { void add(ResourceLock l); - void update(long id, Date lockTime, Date expirationTime, int lockCount); + void update(long id, String lockHolder, Date lockTime, Date expirationTime, int lockCount); ResourceLock getByResourceName(String resourceName); diff --git a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/dao/ResourceLockDaoImpl.java b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/dao/ResourceLockDaoImpl.java index 485419224..b8b3a66d6 100644 --- a/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/dao/ResourceLockDaoImpl.java +++ b/resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/dao/ResourceLockDaoImpl.java @@ -21,8 +21,6 @@ package org.onap.ccsdk.sli.adaptors.lock.dao; -import java.sql.ResultSet; -import java.sql.SQLException; import java.util.Date; import java.util.List; import org.onap.ccsdk.sli.adaptors.lock.data.ResourceLock; @@ -44,32 +42,28 @@ public class ResourceLockDaoImpl implements ResourceLockDao { jdbcTemplate.update( "INSERT INTO RESOURCE_LOCK (resource_name, lock_holder, lock_count, lock_time, expiration_time)\n" + "VALUES (?, ?, ?, ?, ?)", - new Object[] { l.resourceName, l.lockHolder, l.lockCount, l.lockTime, l.expirationTime }); + new Object[] { l.resourceName, l.lockHolder, l.lockCount, l.lockTime, l.expirationTime }); } @Override - public void update(long id, Date lockTime, Date expirationTime, int lockCount) { + public void update(long id, String lockHolder, Date lockTime, Date expirationTime, int lockCount) { jdbcTemplate.update( - "UPDATE RESOURCE_LOCK SET lock_time = ?, expiration_time = ?, lock_count = ? WHERE resource_lock_id = ?", - new Object[] { lockTime, expirationTime, lockCount, id }); + "UPDATE RESOURCE_LOCK SET lock_holder = ?, lock_time = ?, expiration_time = ?, lock_count = ? WHERE resource_lock_id = ?", + new Object[] { lockHolder, lockTime, expirationTime, lockCount, id }); } @Override public ResourceLock getByResourceName(String resourceName) { List<ResourceLock> ll = jdbcTemplate.query("SELECT * FROM RESOURCE_LOCK WHERE resource_name = ?", - new Object[] { resourceName }, new RowMapper<ResourceLock>() { - - @Override - public ResourceLock mapRow(ResultSet rs, int rowNum) throws SQLException { - ResourceLock rl = new ResourceLock(); - rl.id = rs.getLong("resource_lock_id"); - rl.resourceName = rs.getString("resource_name"); - rl.lockHolder = rs.getString("lock_holder"); - rl.lockCount = rs.getInt("lock_count"); - rl.lockTime = rs.getTimestamp("lock_time"); - rl.expirationTime = rs.getTimestamp("expiration_time"); - return rl; - } + new Object[] { resourceName }, (RowMapper<ResourceLock>) (rs, rowNum) -> { + ResourceLock rl = new ResourceLock(); + rl.id = rs.getLong("resource_lock_id"); + rl.resourceName = rs.getString("resource_name"); + rl.lockHolder = rs.getString("lock_holder"); + rl.lockCount = rs.getInt("lock_count"); + rl.lockTime = rs.getTimestamp("lock_time"); + rl.expirationTime = rs.getTimestamp("expiration_time"); + return rl; }); return ll != null && !ll.isEmpty() ? ll.get(0) : null; } diff --git a/resource-assignment/provider/src/test/java/jtest/org/onap/ccsdk/sli/adaptors/ra/TestResourceLockNode.java b/resource-assignment/provider/src/test/java/jtest/org/onap/ccsdk/sli/adaptors/ra/TestResourceLockNode.java index 377257c41..bfb9ad7e4 100644 --- a/resource-assignment/provider/src/test/java/jtest/org/onap/ccsdk/sli/adaptors/ra/TestResourceLockNode.java +++ b/resource-assignment/provider/src/test/java/jtest/org/onap/ccsdk/sli/adaptors/ra/TestResourceLockNode.java @@ -28,6 +28,7 @@ public class TestResourceLockNode { public void test1() throws Exception { Map<String, String> paramMap = new HashMap<>(); paramMap.put("resource-name", "test-resource-1"); + paramMap.put("lock-requester", "SDNA"); resourceLockNode.lockResource(paramMap, null); resourceLockNode.unlockResource(paramMap, null); |