From dee199dd21b286e4c9e3af36fbc0d646168615e4 Mon Sep 17 00:00:00 2001 From: Mohammad Salehe Date: Fri, 8 Feb 2019 11:22:33 -0500 Subject: Check for lockref validity while guarding it Lock references are not unique until the guard is updated, so in case of contention, we might not be able to use the lock reference we have. We should abort so the caller can try again Change-Id: I52cfb8c6979cced81dd20f4ef9b55b79121f121f Issue-ID: MUSIC-148 Signed-off-by: Mohammad Salehe --- .../onap/music/lockingservice/cassandra/CassaLockStore.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java b/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java index ec694ddc..cbc172db 100644 --- a/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java +++ b/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java @@ -119,8 +119,6 @@ public class CassaLockStore { long lockEpochMillis = System.currentTimeMillis(); // System.out.println("guard(" + lockName + "): " + prevGuard + "->" + lockRef); - logger.info(EELFLoggerDelegate.applicationLogger, - "Created lock reference for " + keyspace + "." + table + "." + lockName + ":" + lockRef); queryObject = new PreparedQueryObject(); String insQuery = "BEGIN BATCH" + @@ -141,6 +139,11 @@ public class CassaLockStore { queryObject.addValue(isWriteLock); queryObject.appendQueryString(insQuery); boolean pResult = dsHandle.executePut(queryObject, "critical"); + + if (pResult == false) // LockReference is used by another actor before we could guard it + throw new MusicServiceException("LockReference went out of hand"); + logger.info(EELFLoggerDelegate.applicationLogger, + "Created+Enq lock reference for " + keyspace + "." + table + "." + lockName + ":" + lockRef); return String.valueOf(lockRef); } finally { @@ -172,8 +175,7 @@ public class CassaLockStore { } return lockQueue; } - - + /** * Returns a result set containing the list of clients waiting for a particular lock * @param keyspace -- cgit 1.2.3-korg