diff options
Diffstat (limited to 'src/main/java/org/onap/music/datastore/CassaLockStore.java')
-rw-r--r-- | src/main/java/org/onap/music/datastore/CassaLockStore.java | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/src/main/java/org/onap/music/datastore/CassaLockStore.java b/src/main/java/org/onap/music/datastore/CassaLockStore.java index e03a1c07..67e96533 100644 --- a/src/main/java/org/onap/music/datastore/CassaLockStore.java +++ b/src/main/java/org/onap/music/datastore/CassaLockStore.java @@ -1,5 +1,6 @@ package org.onap.music.datastore; +import java.util.List; import java.util.UUID; import org.onap.music.eelf.logging.EELFLoggerDelegate; @@ -77,31 +78,41 @@ public class CassaLockStore { public String genLockRefandEnQueue(String keyspace, String table, String lockName) throws MusicServiceException, MusicQueryException { logger.info(EELFLoggerDelegate.applicationLogger, "Create lock reference for " + keyspace + "." + table + "." + lockName); - table = "lockQ_" + table; - long lockEpochMillis = System.currentTimeMillis(); - long lockRef = lockEpochMillis; + table = "lockQ_" + table; - logger.info(EELFLoggerDelegate.applicationLogger, - "Created lock reference for " + keyspace + "." + table + "." + lockName + ":" + lockRef); - PreparedQueryObject queryObject = new PreparedQueryObject(); - String defaultQuery = " UPDATE " + keyspace + "." + table + " SET guard=-1 WHERE key=? IF guard = NULL;"; + PreparedQueryObject queryObject = new PreparedQueryObject(); + String selectQuery = "SELECT guard FROM " + keyspace + "." + table + " WHERE key=?;"; - queryObject.addValue(lockName); - queryObject.appendQueryString(defaultQuery); - boolean dqResult = dsHandle.executePut(queryObject, "critical"); -// System.out.println("dqResult: " + dqResult); + queryObject.addValue(lockName); + queryObject.appendQueryString(selectQuery); + ResultSet gqResult = dsHandle.executeEventualGet(queryObject); + List<Row> latestGuardRow = gqResult.all(); + + long prevGuard = 0; + long lockRef = 1; + if (latestGuardRow.size() > 0) { + prevGuard = latestGuardRow.get(0).getLong(0); + lockRef = prevGuard + 1; + } + 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" + - " UPDATE " + keyspace + "." + table + " SET guard=? WHERE key=? IF guard < ?;" + + " UPDATE " + keyspace + "." + table + + " SET guard=? WHERE key=? IF guard = " + (prevGuard == 0 ? "NULL" : "?") +";" + " INSERT INTO " + keyspace + "." + table + "(key, lockReference, createTime, acquireTime) VALUES (?,?,?,?) IF NOT EXISTS; APPLY BATCH;"; queryObject.addValue(lockRef); queryObject.addValue(lockName); - queryObject.addValue(lockRef); + if (prevGuard != 0) + queryObject.addValue(prevGuard); queryObject.addValue(lockName); queryObject.addValue(lockRef); @@ -109,7 +120,6 @@ public class CassaLockStore { queryObject.addValue("0"); queryObject.appendQueryString(insQuery); boolean pResult = dsHandle.executePut(queryObject, "critical"); -// System.out.println("pResult: " + pResult); return String.valueOf(lockRef); } |