RA: Fix locking when there is expired lock in DB 45/75645/1
authorStan Bonev <sb5356@att.com>
Thu, 10 Jan 2019 17:52:58 +0000 (12:52 -0500)
committerStan Bonev <sb5356@att.com>
Thu, 10 Jan 2019 17:52:58 +0000 (12:52 -0500)
Change-Id: I026bdea43c0386689c98902aac95be02e27f7704
Issue-ID: CCSDK-937
Signed-off-by: Stan Bonev <sb5356@att.com>
resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/comp/LockHelperImpl.java
resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/dao/ResourceLockDao.java
resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/lock/dao/ResourceLockDaoImpl.java
resource-assignment/provider/src/test/java/jtest/org/onap/ccsdk/sli/adaptors/ra/TestResourceLockNode.java

index 0efd897..735d240 100644 (file)
@@ -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();
         }
     }
index f9d4113..dc86f70 100644 (file)
@@ -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);
 
index 4854192..b8b3a66 100644 (file)
@@ -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;
     }
index 377257c..bfb9ad7 100644 (file)
@@ -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);