diff options
Diffstat (limited to 'src/main/java/org/onap/music/datastore')
-rw-r--r-- | src/main/java/org/onap/music/datastore/CassaDataStore.java | 19 | ||||
-rw-r--r-- | src/main/java/org/onap/music/datastore/CassaLockStore.java | 38 |
2 files changed, 29 insertions, 28 deletions
diff --git a/src/main/java/org/onap/music/datastore/CassaDataStore.java b/src/main/java/org/onap/music/datastore/CassaDataStore.java index 14934f6e..ec0b2581 100644 --- a/src/main/java/org/onap/music/datastore/CassaDataStore.java +++ b/src/main/java/org/onap/music/datastore/CassaDataStore.java @@ -32,6 +32,7 @@ import java.util.Iterator; import java.util.Map; import java.util.UUID; +import com.datastax.driver.core.*; import org.onap.music.eelf.logging.EELFLoggerDelegate; import org.onap.music.eelf.logging.format.AppMessages; import org.onap.music.eelf.logging.format.ErrorSeverity; @@ -39,18 +40,7 @@ import org.onap.music.eelf.logging.format.ErrorTypes; import org.onap.music.exceptions.MusicQueryException; import org.onap.music.exceptions.MusicServiceException; import org.onap.music.main.MusicUtil; -import com.datastax.driver.core.Cluster; -import com.datastax.driver.core.ColumnDefinitions; import com.datastax.driver.core.ColumnDefinitions.Definition; -import com.datastax.driver.core.ConsistencyLevel; -import com.datastax.driver.core.DataType; -import com.datastax.driver.core.KeyspaceMetadata; -import com.datastax.driver.core.Metadata; -import com.datastax.driver.core.PreparedStatement; -import com.datastax.driver.core.ResultSet; -import com.datastax.driver.core.Row; -import com.datastax.driver.core.Session; -import com.datastax.driver.core.TableMetadata; import com.datastax.driver.core.exceptions.AlreadyExistsException; import com.datastax.driver.core.exceptions.InvalidQueryException; import com.datastax.driver.core.exceptions.NoHostAvailableException; @@ -373,7 +363,6 @@ public class CassaDataStore { try { preparedInsert = session.prepare(queryObject.getQuery()); - } catch(InvalidQueryException iqe) { logger.error(EELFLoggerDelegate.errorLogger, iqe.getMessage(),AppMessages.QUERYERROR, ErrorSeverity.CRITICAL, ErrorTypes.QUERYERROR); throw new MusicQueryException(iqe.getMessage()); @@ -391,9 +380,11 @@ public class CassaDataStore { preparedInsert.setConsistencyLevel(ConsistencyLevel.ONE); } - ResultSet rs = session.execute(preparedInsert.bind(queryObject.getValues().toArray())); - result = rs.wasApplied(); + BoundStatement boundStatement = preparedInsert.bind(queryObject.getValues().toArray()); + boundStatement.setDefaultTimestamp(MusicUtil.v2sTimeStampInMicroseconds(0, System.currentTimeMillis())); + ResultSet rs = session.execute(boundStatement); + result = rs.wasApplied(); } catch (AlreadyExistsException ae) { logger.error(EELFLoggerDelegate.errorLogger, ae.getMessage(),AppMessages.SESSIONFAILED+ " [" + queryObject.getQuery() + "]", ErrorSeverity.ERROR, ErrorTypes.QUERYERROR); 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); } |