aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/music/service/impl/MusicCassaCore.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/onap/music/service/impl/MusicCassaCore.java')
-rw-r--r--src/main/java/org/onap/music/service/impl/MusicCassaCore.java1149
1 files changed, 0 insertions, 1149 deletions
diff --git a/src/main/java/org/onap/music/service/impl/MusicCassaCore.java b/src/main/java/org/onap/music/service/impl/MusicCassaCore.java
deleted file mode 100644
index 0d2e3f0a..00000000
--- a/src/main/java/org/onap/music/service/impl/MusicCassaCore.java
+++ /dev/null
@@ -1,1149 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2017 AT&T Intellectual Property
- * Modifications Copyright (c) 2018 IBM.
- * ===================================================================
- * Modifications Copyright (c) 2019 Samsung
- * ===================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * ============LICENSE_END=============================================
- * ====================================================================
- */
-
-package org.onap.music.service.impl;
-
-import java.io.StringWriter;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import javax.ws.rs.core.MultivaluedMap;
-
-import org.onap.music.datastore.Condition;
-import org.onap.music.datastore.MusicDataStore;
-import org.onap.music.datastore.MusicDataStoreHandle;
-import org.onap.music.datastore.PreparedQueryObject;
-import org.onap.music.datastore.jsonobjects.JsonDelete;
-import org.onap.music.datastore.jsonobjects.JsonIndex;
-import org.onap.music.datastore.jsonobjects.JsonInsert;
-import org.onap.music.datastore.jsonobjects.JsonKeySpace;
-import org.onap.music.datastore.jsonobjects.JsonSelect;
-import org.onap.music.datastore.jsonobjects.JsonTable;
-import org.onap.music.datastore.jsonobjects.JsonUpdate;
-import org.onap.music.eelf.logging.EELFLoggerDelegate;
-import org.onap.music.eelf.logging.format.AppMessages;
-import org.onap.music.eelf.logging.format.ErrorSeverity;
-import org.onap.music.eelf.logging.format.ErrorTypes;
-import org.onap.music.exceptions.MusicDeadlockException;
-import org.onap.music.exceptions.MusicLockingException;
-import org.onap.music.exceptions.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.lockingservice.cassandra.CassaLockStore;
-import org.onap.music.lockingservice.cassandra.CassaLockStore.LockObject;
-import org.onap.music.lockingservice.cassandra.LockType;
-import org.onap.music.lockingservice.cassandra.MusicLockState;
-import org.onap.music.lockingservice.cassandra.MusicLockState.LockStatus;
-import org.onap.music.main.MusicUtil;
-import org.onap.music.main.ResultType;
-import org.onap.music.main.ReturnType;
-import org.onap.music.service.MusicCoreService;
-
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.TableMetadata;
-
-public class MusicCassaCore implements MusicCoreService {
-
- private static CassaLockStore mLockHandle = null;
- private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicCassaCore.class);
- private static MusicCassaCore musicCassaCoreInstance = null;
-
- private MusicCassaCore() {
- // not going to happen
- }
-
- public static CassaLockStore getmLockHandle() {
- return mLockHandle;
- }
-
- public static void setmLockHandle(CassaLockStore mLockHandle) {
- MusicCassaCore.mLockHandle = mLockHandle;
- }
-
- public static MusicCassaCore getInstance() {
-
- if(musicCassaCoreInstance == null) {
- musicCassaCoreInstance = new MusicCassaCore();
- }
- return musicCassaCoreInstance;
- }
-
-
-
-
- public static CassaLockStore getLockingServiceHandle() throws MusicLockingException {
- logger.info(EELFLoggerDelegate.applicationLogger,"Acquiring lock store handle");
- long start = System.currentTimeMillis();
-
- if (mLockHandle == null) {
- try {
- mLockHandle = new CassaLockStore(MusicDataStoreHandle.getDSHandle());
- } catch (Exception e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.LOCKHANDLE,ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
- throw new MusicLockingException("Failed to aquire Locl store handle " + e);
- }
- }
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.applicationLogger,"Time taken to acquire lock store handle:" + (end - start) + " ms");
- return mLockHandle;
- }
-
- public String createLockReference(String fullyQualifiedKey) throws MusicLockingException {
- return createLockReference(fullyQualifiedKey, LockType.WRITE);
- }
-
- public String createLockReference(String fullyQualifiedKey, LockType locktype) throws MusicLockingException {
- return createLockReference(fullyQualifiedKey, locktype, null);
- }
-
- public String createLockReference(String fullyQualifiedKey, LockType locktype, String owner) throws MusicLockingException {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String lockName = splitString[2];
-
- logger.info(EELFLoggerDelegate.applicationLogger,"Creating lock reference for lock name:" + lockName);
- long start = System.currentTimeMillis();
- String lockReference = null;
-
- try {
- boolean deadlock = getLockingServiceHandle().checkForDeadlock(keyspace, table, lockName, locktype, owner, false);
- if (deadlock) {
- MusicDeadlockException e = new MusicDeadlockException("Deadlock detected when " + owner + " tried to create lock on " + keyspace + "." + table + "." + lockName);
- e.setValues(owner, keyspace, table, lockName);
- throw e;
- }
- } catch (MusicDeadlockException e) {
- //just threw this, no need to wrap it
- throw e;
- } catch (MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.applicationLogger, e);
- throw new MusicLockingException("Unable to check for deadlock. " + e.getMessage(), e);
- }
-
- try {
- lockReference = "" + getLockingServiceHandle().genLockRefandEnQueue(keyspace, table, lockName, locktype, owner);
- } catch (MusicLockingException | MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.applicationLogger, e);
- throw new MusicLockingException("Unable to create lock reference. " + e.getMessage(), e);
- } catch (Exception e) {
- logger.error(EELFLoggerDelegate.applicationLogger, e);
- throw new MusicLockingException("Unable to create lock reference. " + e.getMessage(), e);
- }
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.applicationLogger,"Time taken to create lock reference:" + (end - start) + " ms");
- return lockReference;
- }
-
- public ReturnType promoteLock(String lockId) throws MusicLockingException {
- String[] splitString = lockId.split("\\.");
- String keyspace = splitString[0].substring(1);//remove '$'
- String table = splitString[1];
- String primaryKeyValue = splitString[2].substring(0, splitString[2].lastIndexOf("$"));
- String localFullyQualifiedKey = lockId.substring(1, lockId.lastIndexOf("$"));
- String lockRef = lockId.substring(lockId.lastIndexOf("$")+1); //lockRef is "$" to end
-
- logger.info(EELFLoggerDelegate.applicationLogger,"Attempting to promote lock " + lockId);
-
- try {
- return getLockingServiceHandle().promoteLock(keyspace, table, primaryKeyValue, lockRef);
- } catch (MusicServiceException e) {
- throw new MusicLockingException("Unable to promote lock. ", e);
- } catch (MusicQueryException e) {
- throw new MusicLockingException("Unable to promote lock. ", e);
- }
-
- }
-
-
- public ReturnType acquireLockWithLease(String fullyQualifiedKey, String lockReference, long leasePeriod)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
- evictExpiredLockHolder(fullyQualifiedKey,leasePeriod);
- return acquireLock(fullyQualifiedKey, lockReference);
- }
-
- private void evictExpiredLockHolder(String fullyQualifiedKey, long leasePeriod)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
-
- LockObject currentLockHolderObject = getLockingServiceHandle().peekLockQueue(keyspace, table, primaryKeyValue);
-
- if (!currentLockHolderObject.getIsLockOwner()) { // no lock holder
- return;
- }
- /*
- * Release the lock of the previous holder if it has expired. if the update to the acquire time has
- * not reached due to network delays, simply use the create time as the reference
- */
- long referenceTime = Math.max(Long.parseLong(currentLockHolderObject.getAcquireTime()),
- Long.parseLong(currentLockHolderObject.getCreateTime()));
- if ((System.currentTimeMillis() - referenceTime) > leasePeriod) {
- forciblyReleaseLock(fullyQualifiedKey, currentLockHolderObject.getLockRef() + "");
- logger.info(EELFLoggerDelegate.applicationLogger, currentLockHolderObject.getLockRef() + " forcibly released");
- }
- }
-
- public ReturnType acquireLock(String fullyQualifiedKey, String lockId)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
- String[] splitString = lockId.split("\\.");
- String keyspace = splitString[0].substring(1);//remove '$'
- String table = splitString[1];
- String primaryKeyValue = splitString[2].substring(0, splitString[2].lastIndexOf("$"));
- String localFullyQualifiedKey = lockId.substring(1, lockId.lastIndexOf("$"));
- String lockRef = lockId.substring(lockId.lastIndexOf("$")+1); //lockRef is "$" to end
-
- LockObject lockInfo = getLockingServiceHandle().getLockInfo(keyspace, table, primaryKeyValue, lockRef);
-
- if (!lockInfo.getIsLockOwner()) {
- return new ReturnType(ResultType.FAILURE, lockId + " is not a lock holder");//not top of the lock store q
- }
-
- if (getLockingServiceHandle().checkForDeadlock(keyspace, table, primaryKeyValue, lockInfo.getLocktype(), lockInfo.getOwner(), true)) {
- MusicDeadlockException e = new MusicDeadlockException("Deadlock detected when " + lockInfo.getOwner() + " tried to create lock on " + keyspace + "." + table + "." + primaryKeyValue);
- e.setValues(lockInfo.getOwner(), keyspace, table, primaryKeyValue);
- throw e;
- }
-
- //check to see if the value of the key has to be synced in case there was a forceful release
- String syncTable = keyspace+".unsyncedKeys_"+table;
- String query = "select * from "+syncTable+" where key='"+localFullyQualifiedKey+"';";
- PreparedQueryObject readQueryObject = new PreparedQueryObject();
- readQueryObject.appendQueryString(query);
- ResultSet results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(readQueryObject);
- if (!results.all().isEmpty()) {
- logger.info("In acquire lock: Since there was a forcible release, need to sync quorum!");
- try {
- syncQuorum(keyspace, table, primaryKeyValue);
- } catch (Exception e) {
- StringWriter sw = new StringWriter();
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), "[ERR506E] Failed to aquire lock ",
- ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR, e);
- String exceptionAsString = sw.toString();
- return new ReturnType(ResultType.FAILURE, "Exception thrown while syncing key:\n" + exceptionAsString);
- }
- String cleanQuery = "delete from " + syncTable + " where key='"+localFullyQualifiedKey+"';";
- PreparedQueryObject deleteQueryObject = new PreparedQueryObject();
- deleteQueryObject.appendQueryString(cleanQuery);
- MusicDataStoreHandle.getDSHandle().executePut(deleteQueryObject, "critical");
- }
-
- getLockingServiceHandle().updateLockAcquireTime(keyspace, table, primaryKeyValue, lockRef);
-
- return new ReturnType(ResultType.SUCCESS, lockRef+" is the lock holder for the key");
- }
-
-
-
- /**
- *
- * @param tableQueryObject
- * @param consistency
- * @return Boolean Indicates success or failure
- * @throws MusicServiceException
- *
- *
- */
- public ResultType createTable(String keyspace, String table, PreparedQueryObject tableQueryObject,
- String consistency) throws MusicServiceException {
- boolean result = false;
-
- try {
- // create shadow locking table
- result = getLockingServiceHandle().createLockQueue(keyspace, table);
- if (result == false)
- return ResultType.FAILURE;
-
- result = false;
-
- // create table to track unsynced_keys
- table = "unsyncedKeys_" + table;
-
- String tabQuery =
- "CREATE TABLE IF NOT EXISTS " + keyspace + "." + table + " ( key text,PRIMARY KEY (key) );";
- PreparedQueryObject queryObject = new PreparedQueryObject();
-
- queryObject.appendQueryString(tabQuery);
- result = false;
- result = MusicDataStoreHandle.getDSHandle().executePut(queryObject, "eventual");
-
- // create actual table
- result = MusicDataStoreHandle.getDSHandle().executePut(tableQueryObject, consistency);
- } catch (MusicQueryException | MusicServiceException | MusicLockingException ex) {
- logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(), AppMessages.UNKNOWNERROR, ErrorSeverity.WARN,
- ErrorTypes.MUSICSERVICEERROR);
- throw new MusicServiceException(ex.getMessage());
- }
- return result ? ResultType.SUCCESS : ResultType.FAILURE;
- }
-
- private static void syncQuorum(String keyspace, String table, String primaryKeyValue) throws Exception {
- logger.info(EELFLoggerDelegate.applicationLogger,"Performing sync operation---");
- PreparedQueryObject selectQuery = new PreparedQueryObject();
- PreparedQueryObject updateQuery = new PreparedQueryObject();
-
- // get the primary key d
- TableMetadata tableInfo = MusicDataStoreHandle.returnColumnMetadata(keyspace, table);
- String primaryKeyName = tableInfo.getPrimaryKey().get(0).getName(); // we only support single
- // primary key
- DataType primaryKeyType = tableInfo.getPrimaryKey().get(0).getType();
- Object cqlFormattedPrimaryKeyValue =
- MusicUtil.convertToActualDataType(primaryKeyType, primaryKeyValue);
-
- // get the row of data from a quorum
- selectQuery.appendQueryString("SELECT * FROM " + keyspace + "." + table + " WHERE "
- + primaryKeyName + "= ?" + ";");
- selectQuery.addValue(cqlFormattedPrimaryKeyValue);
- MusicUtil.writeBackToQuorum(selectQuery, primaryKeyName, updateQuery, keyspace, table,
- cqlFormattedPrimaryKeyValue);
- }
-
- /**
- *
- * @param query
- * @return ResultSet
- */
- public ResultSet quorumGet(PreparedQueryObject query) {
- ResultSet results = null;
- try {
- results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(query);
- } catch (MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.UNKNOWNERROR,
- ErrorSeverity.MAJOR, ErrorTypes.GENERALSERVICEERROR, e);
-
- }
- return results;
- }
-
- public String whoseTurnIsIt(String fullyQualifiedKey) {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
- try {
- LockObject lockOwner = getLockingServiceHandle().peekLockQueue(keyspace, table, primaryKeyValue);
- if (!lockOwner.getIsLockOwner()) {
- return null;
- }
- return "$" + fullyQualifiedKey + "$" + lockOwner.getLockRef();
- } catch (MusicLockingException | MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), AppMessages.LOCKINGERROR + fullyQualifiedKey,
- ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
- }
- return null;
- }
-
- public List<String> getCurrentLockHolders(String fullyQualifiedKey) {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
- try {
- return getLockingServiceHandle().getCurrentLockHolders(keyspace, table, primaryKeyValue);
- } catch (MusicLockingException | MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.LOCKINGERROR+fullyQualifiedKey ,ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
- }
- return null;
- }
-
- /**
- *
- * @param lockReference
- * @return
- */
- public static String getLockNameFromId(String lockReference) {
- StringTokenizer st = new StringTokenizer(lockReference);
- return st.nextToken("$");
- }
-
- @Override
- public void destroyLockRef(String lockId) throws MusicLockingException {
- long start = System.currentTimeMillis();
- String fullyQualifiedKey = lockId.substring(1, lockId.lastIndexOf("$"));
- String lockRef = lockId.substring(lockId.lastIndexOf('$')+1);
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
- try {
- getLockingServiceHandle().deQueueLockRef(keyspace, table, primaryKeyValue, lockRef,MusicUtil.getRetryCount());
- } catch (MusicLockingException | MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.DESTROYLOCK+lockRef,
- ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR, e);
- throw new MusicLockingException(e.getMessage());
- }
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.applicationLogger,"Time taken to destroy lock reference:" + (end - start) + " ms");
- }
-
- public MusicLockState destroyLockRef(String fullyQualifiedKey, String lockReference) throws MusicLockingException {
- long start = System.currentTimeMillis();
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
- try {
- getLockingServiceHandle().deQueueLockRef(keyspace, table, primaryKeyValue, lockReference,MusicUtil.getRetryCount());
- } catch (MusicLockingException | MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.DESTROYLOCK + lockReference,
- ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR,e);
- throw new MusicLockingException(e.getMessage());
- }
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.applicationLogger,"Time taken to destroy lock reference:" + (end - start) + " ms");
- return new MusicLockState(LockStatus.UNLOCKED, "");
- }
-
- @Override
- public MusicLockState releaseLock(String lockId, boolean voluntaryRelease) throws MusicLockingException {
- String fullyQualifiedKey = lockId.substring(1, lockId.lastIndexOf("$"));
- String lockRef = lockId.substring(lockId.lastIndexOf('$')+1);
- if (voluntaryRelease) {
- return voluntaryReleaseLock(fullyQualifiedKey, lockRef);
- } else {
- return forciblyReleaseLock(fullyQualifiedKey, lockRef);
- }
- }
-
- public MusicLockState voluntaryReleaseLock(String fullyQualifiedKey, String lockReference)
- throws MusicLockingException {
- MusicLockState result = null;
- try {
- result = destroyLockRef(fullyQualifiedKey, lockReference);
- } catch (Exception ex) {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Exception in voluntaryReleaseLock() for " + fullyQualifiedKey + "ref: " + lockReference);
- throw new MusicLockingException(ex.getMessage());
- }
- return result;
- }
-
- public MusicLockState forciblyReleaseLock(String fullyQualifiedKey, String lockReference) throws MusicLockingException {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
-
- //leave a signal that this key could potentially be unsynchronized
- String syncTable = keyspace+".unsyncedKeys_"+table;
- PreparedQueryObject queryObject = new PreparedQueryObject();
- String values = "(?)";
- queryObject.addValue(fullyQualifiedKey);
- String insQuery = "insert into "+syncTable+" (key) values "+values+";";
- queryObject.appendQueryString(insQuery);
- try {
- MusicDataStoreHandle.getDSHandle().executePut(queryObject, "critical");
- } catch (Exception e) {
- logger.error("Cannot forcibly release lock: " + fullyQualifiedKey + " " + lockReference + ". "
- + e.getMessage(), e);
- }
-
- //now release the lock
- return destroyLockRef(fullyQualifiedKey, lockReference);
- }
-
- @Override
- public List<String> releaseAllLocksForOwner(String ownerId, String keyspace, String table) throws MusicLockingException, MusicServiceException, MusicQueryException {
-// System.out.println("IN RELEASEALLLOCKSFOROWNER, ");
-
- List<String> lockIds = getLockingServiceHandle().getAllLocksForOwner(ownerId, keyspace, table);
- for (String lockId : lockIds) {
-// System.out.println(" LOCKID = " + lockId);
- //return "$" + keyspace + "." + table + "." + lockName + "$" + String.valueOf(lockRef);
- releaseLock("$" + keyspace + "." + table + "." + lockId, true);
- }
- return lockIds;
- }
-
- /**
- *
- * @param lockName
- * @throws MusicLockingException
- */
- @Deprecated
- public void deleteLock(String lockName) throws MusicLockingException {
- throw new MusicLockingException("Depreciated Method Delete Lock");
- }
-
- // Prepared Query Additions.
-
- /**
- *
- * @param queryObject
- * @return ReturnType
- * @throws MusicServiceException
- */
- public ReturnType eventualPut(PreparedQueryObject queryObject) {
- boolean result = false;
- try {
- result = MusicDataStoreHandle.getDSHandle().executePut(queryObject, MusicUtil.EVENTUAL);
- } catch (MusicServiceException | MusicQueryException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), "[ERR512E] Failed to get Lock Handle " ,ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR);
- logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage() + " " + ex.getCause() + " " + ex);
- return new ReturnType(ResultType.FAILURE, ex.getMessage());
- }
- if (result) {
- return new ReturnType(ResultType.SUCCESS, "Eventual Operation Successfully performed");
- } else {
- return new ReturnType(ResultType.FAILURE, "Eventual Operation failed to perform");
- }
- }
-
- /**
- *
- * @param queryObject
- * @return ReturnType
- * @throws MusicServiceException
- */
- public ReturnType eventualPut_nb(PreparedQueryObject queryObject,String keyspace,String tablename,String primaryKey) {
- boolean result = false;
- long guard = 0;
- PreparedQueryObject getGaurd = new PreparedQueryObject();
- getGaurd.appendQueryString("SELECT guard FROM "+keyspace+".lockq_"+tablename+ " WHERE key = ? ;");
- getGaurd.addValue(primaryKey);
- try {
- ResultSet getGaurdResult = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(getGaurd);
- Row row = getGaurdResult.one();
- if (row != null) {
- guard = row.getLong("guard");
- long timeOfWrite = System.currentTimeMillis();
- long ts = MusicUtil.v2sTimeStampInMicroseconds(guard, timeOfWrite);
- String query = queryObject.getQuery();
- if (!queryObject.getQuery().contains("USING TIMESTAMP")) {
- if (queryObject.getOperation().equalsIgnoreCase("delete"))
- query = query.replaceFirst("WHERE", " USING TIMESTAMP " + ts + " WHERE ");
- else
- query = query.replaceFirst("SET", "USING TIMESTAMP " + ts + " SET");
- }
- queryObject.replaceQueryString(query);
- }
-
- } catch (MusicServiceException | MusicQueryException e) {
- logger.error(EELFLoggerDelegate.applicationLogger,e.getMessage(), e);
- }
- try {
- result = MusicDataStoreHandle.getDSHandle().executePut(queryObject, MusicUtil.EVENTUAL);
- } catch (MusicServiceException | MusicQueryException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(),"[ERR512E] Failed to get Lock Handle ",
- ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR);
- logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage() + " " + ex.getCause() + " ", ex);
- return new ReturnType(ResultType.FAILURE, ex.getMessage());
- }
- if (result) {
- return new ReturnType(ResultType.SUCCESS, "Eventual Operation Successfully performed");
- } else {
- return new ReturnType(ResultType.FAILURE, "Eventual Operation failed to perform");
- }
- }
-
- /**
- *
- * @param keyspace
- * @param table
- * @param primaryKeyValue
- * @param queryObject
- * @param lockId
- * @return
- */
- public ReturnType criticalPut(String keyspace, String table, String primaryKeyValue,
- PreparedQueryObject queryObject, String lockId, Condition conditionInfo) {
- long start = System.currentTimeMillis();
- try {
- String keyLock = lockId.substring(lockId.lastIndexOf(".") + 1,lockId.lastIndexOf("$"));
- if (lockId.contains(".") && !keyLock.equals(primaryKeyValue)) {
- return new ReturnType(ResultType.FAILURE,"Lock value '" + keyLock + "' and key value '"
- + primaryKeyValue + "' not match. Please check your values: "
- + lockId + " .");
- }
- LockObject lockObject = getLockingServiceHandle().getLockInfo(keyspace, table, primaryKeyValue,
- lockId.substring(lockId.lastIndexOf("$") + 1));
-
- if ( lockObject == null ) {
- return new ReturnType(ResultType.FAILURE, lockId + " does not exist.");
- } else if (!lockObject.getIsLockOwner()) {
- return new ReturnType(ResultType.FAILURE, lockId + " is not the lock holder");
- } else if (lockObject.getLocktype() != LockType.WRITE) {
- return new ReturnType(ResultType.FAILURE,
- "Attempting to do write operation, but " + lockId + " is a read lock");
- }
-
- if (conditionInfo != null) {
- try {
- if (conditionInfo.testCondition() == false)
- return new ReturnType(ResultType.FAILURE, "Lock acquired but the condition is not true");
- } catch (Exception e) {
- logger.error(EELFLoggerDelegate.errorLogger, e);
- return new ReturnType(ResultType.FAILURE,
- "Exception thrown while checking the condition, check its sanctity:\n" + e.getMessage());
- }
- }
- String query = queryObject.getQuery();
- long timeOfWrite = System.currentTimeMillis();
- long lockOrdinal = Long.parseLong(lockId.substring(lockId.lastIndexOf("$") + 1));
- long ts = MusicUtil.v2sTimeStampInMicroseconds(lockOrdinal, timeOfWrite);
- // TODO: use Statement instead of modifying query
- if (!queryObject.getQuery().contains("USING TIMESTAMP")) {
- if (queryObject.getOperation().equalsIgnoreCase("delete"))
- query = query.replaceFirst("WHERE", " USING TIMESTAMP " + ts + " WHERE ");
- else if (queryObject.getOperation().equalsIgnoreCase("insert"))
- query = query.replaceFirst(";", " USING TIMESTAMP " + ts + " ; ");
- else
- query = query.replaceFirst("SET", "USING TIMESTAMP " + ts + " SET");
- }
- queryObject.replaceQueryString(query);
- MusicDataStore dsHandle = MusicDataStoreHandle.getDSHandle();
- dsHandle.executePut(queryObject, MusicUtil.CRITICAL);
- long end = System.currentTimeMillis();
- logger.info(EELFLoggerDelegate.applicationLogger,"Time taken for the critical put:" + (end - start) + " ms");
- } catch (MusicQueryException | MusicServiceException | MusicLockingException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), e);
- return new ReturnType(ResultType.FAILURE,
- "Exception thrown while doing the critical put: "
- + e.getMessage());
- }
- return new ReturnType(ResultType.SUCCESS, "Update performed");
- }
-
-
- /**
- *
- * @param queryObject
- * @param consistency
- * @return Boolean Indicates success or failure
- * @throws MusicServiceException
- *
- *
- */
- public ResultType nonKeyRelatedPut(PreparedQueryObject queryObject, String consistency) throws MusicServiceException,MusicQueryException {
- // this is mainly for some functions like keyspace creation etc which does not
- // really need the bells and whistles of Music locking.
- boolean result = false;
-// try {
- result = MusicDataStoreHandle.getDSHandle().executePut(queryObject, consistency);
-// } catch (MusicQueryException | MusicServiceException ex) {
- // logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(), AppMessages.UNKNOWNERROR,
- // ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR, ex);
-// throw new MusicServiceException(ex.getMessage(),ex);
-// }
- return result ? ResultType.SUCCESS : ResultType.FAILURE;
- }
-
- /**
- * This method performs DDL operation on cassandra.
- *
- * @param queryObject query object containing prepared query and values
- * @return ResultSet
- * @throws MusicServiceException
- */
- public ResultSet get(PreparedQueryObject queryObject) throws MusicServiceException {
- ResultSet results = null;
- try {
- results = MusicDataStoreHandle.getDSHandle().executeOneConsistencyGet(queryObject);
- } catch (MusicQueryException | MusicServiceException e) {
- logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), e);
- throw new MusicServiceException(e.getMessage());
- }
- return results;
- }
-
- /**
- * This method performs DDL operations on cassandra, if the the resource is available. Lock ID
- * is used to check if the resource is free.
- *
- * @param keyspace name of the keyspace
- * @param table name of the table
- * @param primaryKeyValue primary key value
- * @param queryObject query object containing prepared query and values
- * @param lockId lock ID to check if the resource is free to perform the operation.
- * @return ResultSet
- */
- public ResultSet criticalGet(String keyspace, String table, String primaryKeyValue,
- PreparedQueryObject queryObject, String lockId) throws MusicServiceException {
- ResultSet results = null;
- String keyLock = lockId.substring(lockId.lastIndexOf(".") + 1,lockId.lastIndexOf("$"));
- try {
- if (lockId.contains(".") && !keyLock.equals(primaryKeyValue)) {
- throw new MusicLockingException("Lock value '" + keyLock + "' and key value '"
- + primaryKeyValue + "' do not match. Please check your values: "
- + lockId + " .");
- }
- LockObject lockObject = getLockingServiceHandle().getLockInfo(keyspace, table, primaryKeyValue,
- lockId.substring(lockId.lastIndexOf("$") + 1));
- if (null == lockObject) {
- throw new MusicLockingException("No Lock Object. Please check if lock name or key is correct."
- + lockId + " .");
- }
- if ( !lockObject.getIsLockOwner()) {
- return null;// not top of the lock store q
- }
- results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(queryObject);
- } catch ( MusicLockingException e ) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity
- .WARN, ErrorTypes.MUSICSERVICEERROR);
- throw new MusicServiceException(
- "Cannot perform critical get for key: " + primaryKeyValue + " : " + e.getMessage());
- } catch (MusicQueryException | MusicServiceException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity
- .WARN, ErrorTypes.MUSICSERVICEERROR, e);
- throw new MusicServiceException(
- "Cannot perform critical get for key: " + primaryKeyValue + " : " + e.getMessage());
- }
- return results;
- }
-
- /**
- * This method performs DML operation on cassandra, when the lock of the dd is acquired.
- *
- * @param keyspaceName name of the keyspace
- * @param tableName name of the table
- * @param primaryKey primary key value
- * @param queryObject query object containing prepared query and values
- * @return ReturnType
- * @throws MusicLockingException
- * @throws MusicServiceException
- * @throws MusicQueryException
- */
- public ReturnType atomicPut(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject, Condition conditionInfo)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
- long start = System.currentTimeMillis();
- String fullyQualifiedKey = keyspaceName + "." + tableName + "." + primaryKey;
- String lockId = createLockReference(fullyQualifiedKey, LockType.WRITE);
- long lockCreationTime = System.currentTimeMillis();
- ReturnType lockAcqResult = null;
- logger.info(EELFLoggerDelegate.applicationLogger,
- "***Acquiring lock for atomicPut() query : " + queryObject.getQuery() + " : " + primaryKey);
- logger.info(EELFLoggerDelegate.applicationLogger,
- "***Acquiring lock for atomicPut() values: " + queryObject.getValues().toString());
- if (conditionInfo != null) {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "***Acquiring lock for atomicPut() conditions: " + conditionInfo.toString());
- }
- try {
- lockAcqResult = acquireLockWithLease(fullyQualifiedKey, lockId, MusicUtil.getDefaultLockLeasePeriod());
- } catch (MusicLockingException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,
- "Exception while acquireLockWithLease() in atomic put for key: " + primaryKey);
- logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage());
- throw new MusicServiceException(
- "Cannot perform atomic put for key: " + primaryKey + " : " + ex.getMessage());
- }
- long lockAcqTime = System.currentTimeMillis();
-
- /*
- * if (!lockAcqResult.getResult().equals(ResultType.SUCCESS)) { logger.info(EELFLoggerDelegate.
- * applicationLogger,"unable to acquire lock, id " + lockId);
- * voluntaryReleaseLock(fullyQualifiedKey,lockId); return lockAcqResult; }
- */
-
- logger.info(EELFLoggerDelegate.applicationLogger, "acquired lock with id " + lockId);
- String lockRef = lockId.substring(lockId.lastIndexOf("$"));
- ReturnType criticalPutResult = null;
- if (lockAcqResult.getResult().equals(ResultType.SUCCESS)) {
- criticalPutResult = criticalPut(keyspaceName, tableName, primaryKey, queryObject, lockRef, conditionInfo);
- long criticalPutTime = System.currentTimeMillis();
- long lockDeleteTime = System.currentTimeMillis();
- String timingInfo = "|lock creation time:" + (lockCreationTime - start) + "|lock accquire time:"
- + (lockAcqTime - lockCreationTime) + "|critical put time:" + (criticalPutTime - lockAcqTime)
- + "|lock delete time:" + (lockDeleteTime - criticalPutTime) + "|";
- criticalPutResult.setTimingInfo(timingInfo);
- } else {
- logger.info(EELFLoggerDelegate.applicationLogger, "unable to acquire lock, id " + lockId);
- criticalPutResult = lockAcqResult;
- }
- try {
- voluntaryReleaseLock(fullyQualifiedKey, lockId);
- } catch (MusicLockingException ex) {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Exception occured while deleting lock after atomic put for key: " + primaryKey);
- criticalPutResult.setMessage(criticalPutResult.getMessage() + "Lock release failed");
- }
- return criticalPutResult;
- }
-
-
-
- /**
- * This method performs DDL operation on cassasndra, when the lock for the resource is acquired.
- *
- * @param keyspaceName name of the keyspace
- * @param tableName name of the table
- * @param primaryKey primary key value
- * @param queryObject query object containing prepared query and values
- * @return ResultSet
- * @throws MusicServiceException
- * @throws MusicLockingException
- * @throws MusicQueryException
- */
- public ResultSet atomicGet(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject) throws MusicServiceException, MusicLockingException, MusicQueryException {
- String fullyQualifiedKey = keyspaceName + "." + tableName + "." + primaryKey;
- String lockId = createLockReference(fullyQualifiedKey, LockType.READ);
- long leasePeriod = MusicUtil.getDefaultLockLeasePeriod();
- ReturnType lockAcqResult = null;
- ResultSet result = null;
- logger.info(EELFLoggerDelegate.applicationLogger, "Acquiring lock for atomicGet() : " + queryObject.getQuery());
- try {
- lockAcqResult = acquireLockWithLease(fullyQualifiedKey, lockId, MusicUtil.getDefaultLockLeasePeriod());
- } catch (MusicLockingException ex) {
- logger.error(EELFLoggerDelegate.errorLogger,
- "Exception while acquireLockWithLease() in atomic get for key: " + primaryKey);
- logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage());
- throw new MusicServiceException(
- "Cannot perform atomic get for key: " + primaryKey + " : " + ex.getMessage());
- }
- if (lockAcqResult.getResult().equals(ResultType.SUCCESS)) {
- logger.info(EELFLoggerDelegate.applicationLogger, "acquired lock with id " + lockId);
- String lockRef = lockId.substring(lockId.lastIndexOf("$"));
- result = criticalGet(keyspaceName, tableName, primaryKey, queryObject, lockRef);
- } else {
- logger.info(EELFLoggerDelegate.applicationLogger, "unable to acquire lock, id " + lockId);
- }
- try {
- voluntaryReleaseLock(fullyQualifiedKey, lockId);
- } catch (MusicLockingException ex) {
- logger.info(EELFLoggerDelegate.applicationLogger,
- "Exception occured while deleting lock after atomic put for key: " + primaryKey);
- throw new MusicLockingException(ex.getMessage());
- }
-
- return result;
- }
-
-
-
- /**
- * @param lockName
- * @return
- */
- public Map<String, Object> validateLock(String lockName) {
- return MusicUtil.validateLock(lockName);
- }
-
- @Override
- @Deprecated
- public ReturnType atomicPutWithDeleteLock(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject, Condition conditionInfo) throws MusicLockingException {
- return null;
- }
-
- @Override
- public List<String> getLockQueue(String fullyQualifiedKey)
- throws MusicServiceException, MusicQueryException, MusicLockingException {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
-
- return getLockingServiceHandle().getLockQueue(keyspace, table, primaryKeyValue);
- }
- @Override
- public long getLockQueueSize(String fullyQualifiedKey)
- throws MusicServiceException, MusicQueryException, MusicLockingException {
- String[] splitString = fullyQualifiedKey.split("\\.");
- String keyspace = splitString[0];
- String table = splitString[1];
- String primaryKeyValue = splitString[2];
-
- return getLockingServiceHandle().getLockQueueSize(keyspace, table, primaryKeyValue);
- }
-
- @Override
- @Deprecated
- public ResultSet atomicGetWithDeleteLock(String keyspaceName, String tableName, String primaryKey,
- PreparedQueryObject queryObject) throws MusicServiceException, MusicLockingException {
- //deprecated
- return null;
- }
-
- //Methods added for ORM changes
-
- public ResultType createKeyspace(JsonKeySpace jsonKeySpaceObject,String consistencyInfo)
- throws MusicServiceException,MusicQueryException {
- ResultType result = nonKeyRelatedPut(jsonKeySpaceObject.genCreateKeyspaceQuery(), consistencyInfo);
- logger.info(EELFLoggerDelegate.applicationLogger, " Keyspace Creation Process completed successfully");
-
- return result;
- }
-
- public ResultType dropKeyspace(JsonKeySpace jsonKeySpaceObject, String consistencyInfo)
- throws MusicServiceException,MusicQueryException {
- ResultType result = nonKeyRelatedPut(jsonKeySpaceObject.genDropKeyspaceQuery(),
- consistencyInfo);
- logger.info(EELFLoggerDelegate.applicationLogger, " Keyspace deletion Process completed successfully");
- return result;
- }
-
- public ResultType createTable(JsonTable jsonTableObject, String consistencyInfo)
- throws MusicServiceException, MusicQueryException {
- ResultType result = null;
- try {
- result = createTable(jsonTableObject.getKeyspaceName(),
- jsonTableObject.getTableName(), jsonTableObject.genCreateTableQuery(), consistencyInfo);
-
- } catch (MusicServiceException ex) {
- logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(), AppMessages.UNKNOWNERROR, ErrorSeverity.WARN,
- ErrorTypes.MUSICSERVICEERROR);
- throw new MusicServiceException(ex.getMessage());
- }
- logger.info(EELFLoggerDelegate.applicationLogger, " Table Creation Process completed successfully ");
- return result;
- }
-
- public ResultType dropTable(JsonTable jsonTableObject,String consistencyInfo)
- throws MusicServiceException,MusicQueryException {
- ResultType result = nonKeyRelatedPut(jsonTableObject.genDropTableQuery(),
- consistencyInfo);
- logger.info(EELFLoggerDelegate.applicationLogger, " Table deletion Process completed successfully ");
-
- return result;
- }
-
- @Override
- public ResultType createIndex(JsonIndex jsonIndexObject, String consistencyInfo)
- throws MusicServiceException, MusicQueryException{
- ResultType result = nonKeyRelatedPut(jsonIndexObject.genCreateIndexQuery(),
- consistencyInfo);
-
- logger.info(EELFLoggerDelegate.applicationLogger, " Index creation Process completed successfully ");
- return result;
- }
-
- /**
- * This method performs DDL operation on cassandra.
- *
- * @param queryObject query object containing prepared query and values
- * @return ResultSet
- * @throws MusicServiceException
- */
- public ResultSet select(JsonSelect jsonSelect, MultivaluedMap<String, String> rowParams)
- throws MusicServiceException, MusicQueryException {
- ResultSet results = null;
- try {
- results = get(jsonSelect.genSelectQuery(rowParams));
- } catch (MusicServiceException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e.getMessage());
- throw new MusicServiceException(e.getMessage());
- }
- return results;
- }
-
- /**
- * Select Critical
- */
- public ResultSet selectCritical(JsonInsert jsonInsertObj, MultivaluedMap<String, String> rowParams)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
-
- ResultSet results = null;
- String consistency = "";
- if(null != jsonInsertObj && null != jsonInsertObj.getConsistencyInfo()) {
- consistency = jsonInsertObj.getConsistencyInfo().get("type");
- }
-
- String lockId = jsonInsertObj.getConsistencyInfo().get("lockId");
-
- PreparedQueryObject queryObject = jsonInsertObj.genSelectCriticalPreparedQueryObj(rowParams);
-
- if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) {
- results = criticalGet(jsonInsertObj.getKeyspaceName(), jsonInsertObj.getTableName(),
- jsonInsertObj.getPrimaryKeyVal(), queryObject,lockId);
- } else if (consistency.equalsIgnoreCase(MusicUtil.ATOMIC)) {
- results = atomicGet(jsonInsertObj.getKeyspaceName(), jsonInsertObj.getTableName(),
- jsonInsertObj.getPrimaryKeyVal(), queryObject);
- }
-
- return results;
- }
-
- /**
- * this is insert row into Table
- */
- public ReturnType insertIntoTable(JsonInsert jsonInsertObj)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
-
- String consistency = "";
- if(null != jsonInsertObj && null != jsonInsertObj.getConsistencyInfo()) {
- consistency = jsonInsertObj.getConsistencyInfo().get("type");
- }
-
- ReturnType result = null;
-
- try {
- PreparedQueryObject queryObj = null;
- queryObj = jsonInsertObj.genInsertPreparedQueryObj();
-
- if (consistency.equalsIgnoreCase(MusicUtil.EVENTUAL)) {
- result = eventualPut(jsonInsertObj.genInsertPreparedQueryObj());
- } else if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) {
- String lockId = jsonInsertObj.getConsistencyInfo().get("lockId");
- if(lockId == null) {
- logger.error(EELFLoggerDelegate.errorLogger,"LockId cannot be null. Create lock reference or"
- + " use ATOMIC instead of CRITICAL", ErrorSeverity.FATAL, ErrorTypes.MUSICSERVICEERROR);
- return new ReturnType(ResultType.FAILURE, "LockId cannot be null. Create lock "
- + "and acquire lock or use ATOMIC instead of CRITICAL");
- }
- result = criticalPut(jsonInsertObj.getKeyspaceName(),
- jsonInsertObj.getTableName(), jsonInsertObj.getPrimaryKeyVal(), jsonInsertObj.genInsertPreparedQueryObj(), lockId,null);
- } else if (consistency.equalsIgnoreCase(MusicUtil.ATOMIC)) {
- result = atomicPut(jsonInsertObj.getKeyspaceName(), jsonInsertObj.getTableName(),
- jsonInsertObj.getPrimaryKeyVal(), jsonInsertObj.genInsertPreparedQueryObj(), null);
- }
- } catch (Exception ex) {
- logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity
- .WARN, ErrorTypes.MUSICSERVICEERROR, ex);
- return new ReturnType(ResultType.FAILURE, ex.getMessage());
- }
-
- return result;
- }
-
- /**
- * This is insert row into Table
- */
- public ReturnType updateTable(JsonUpdate jsonUpdateObj, MultivaluedMap<String, String> rowParams)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
-
- ReturnType result = null;
- String consistency = "";
- if(null != jsonUpdateObj && null != jsonUpdateObj.getConsistencyInfo()) {
- consistency = jsonUpdateObj.getConsistencyInfo().get("type");
- }
- PreparedQueryObject queryObject = jsonUpdateObj.genUpdatePreparedQueryObj(rowParams);
-
- Condition conditionInfo;
- if (jsonUpdateObj.getConditions() == null) {
- conditionInfo = null;
- } else {
- // to avoid parsing repeatedly, just send the select query to obtain row
- PreparedQueryObject selectQuery = new PreparedQueryObject();
- selectQuery.appendQueryString("SELECT * FROM " + jsonUpdateObj.getKeyspaceName() + "." + jsonUpdateObj.getTableName() + " WHERE "
- + jsonUpdateObj.getRowIdString() + ";");
- selectQuery.addValue(jsonUpdateObj.getPrimarKeyValue());
- conditionInfo = new Condition(jsonUpdateObj.getConditions(), selectQuery);
- }
-
-
- if (consistency.equalsIgnoreCase(MusicUtil.EVENTUAL)) {
- result = eventualPut(queryObject);
- } else if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) {
- String lockId = jsonUpdateObj.getConsistencyInfo().get("lockId");
- if(lockId == null) {
- logger.error(EELFLoggerDelegate.errorLogger,"LockId cannot be null. Create lock reference or"
- + " use ATOMIC instead of CRITICAL", ErrorSeverity.FATAL, ErrorTypes.MUSICSERVICEERROR);
-
- return new ReturnType(ResultType.FAILURE, "LockId cannot be null. Create lock "
- + "and acquire lock or use ATOMIC instead of CRITICAL");
- }
- result = criticalPut(jsonUpdateObj.getKeyspaceName(), jsonUpdateObj.getTableName(), jsonUpdateObj.getPrimarKeyValue(),
- queryObject, lockId, conditionInfo);
- } else if (consistency.equalsIgnoreCase("atomic_delete_lock")) {
- // this function is mainly for the benchmarks
- try {
- result = atomicPutWithDeleteLock(jsonUpdateObj.getKeyspaceName(), jsonUpdateObj.getTableName(),
- jsonUpdateObj.getPrimarKeyValue(), queryObject, conditionInfo);
- } catch (MusicLockingException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e, AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN,
- ErrorTypes.GENERALSERVICEERROR, e);
- throw new MusicLockingException(AppMessages.UNKNOWNERROR.toString());
-
- }
- } else if (consistency.equalsIgnoreCase(MusicUtil.ATOMIC)) {
- try {
- result = atomicPut(jsonUpdateObj.getKeyspaceName(), jsonUpdateObj.getTableName(), jsonUpdateObj.getPrimarKeyValue(),
- queryObject, conditionInfo);
- } catch (MusicLockingException e) {
- logger.error(EELFLoggerDelegate.errorLogger,e, AppMessages.UNKNOWNERROR ,ErrorSeverity.WARN, ErrorTypes.GENERALSERVICEERROR, e);
- throw new MusicLockingException(AppMessages.UNKNOWNERROR.toString());
- }
- } else if (consistency.equalsIgnoreCase(MusicUtil.EVENTUAL_NB)) {
- try {
- result = eventualPut_nb(queryObject, jsonUpdateObj.getKeyspaceName(),
- jsonUpdateObj.getTableName(), jsonUpdateObj.getPrimarKeyValue());
- }catch (Exception e) {
- return new ReturnType(ResultType.FAILURE, e.getMessage());
- }
-
- }
-
- return result;
- }
-
- /**
- * This method is for Delete From Table
- */
- public ReturnType deleteFromTable(JsonDelete jsonDeleteObj, MultivaluedMap<String, String> rowParams)
- throws MusicLockingException, MusicQueryException, MusicServiceException {
-
- ReturnType result = null;
- String consistency = "";
- if(null != jsonDeleteObj && null != jsonDeleteObj.getConsistencyInfo()) {
- consistency = jsonDeleteObj.getConsistencyInfo().get("type");
- }
- PreparedQueryObject queryObject = jsonDeleteObj.genDeletePreparedQueryObj(rowParams);
-
- // get the conditional, if any
- Condition conditionInfo;
- if (jsonDeleteObj.getConditions() == null) {
- conditionInfo = null;
- } else {
- // to avoid parsing repeatedly, just send the select query to obtain row
- PreparedQueryObject selectQuery = new PreparedQueryObject();
- selectQuery.appendQueryString("SELECT * FROM " + jsonDeleteObj.getKeyspaceName() + "." + jsonDeleteObj.getTableName() + " WHERE "
- + jsonDeleteObj.getRowIdString() + ";");
- selectQuery.addValue(jsonDeleteObj.getPrimarKeyValue());
- conditionInfo = new Condition(jsonDeleteObj.getConditions(), selectQuery);
- }
-
- if (consistency.equalsIgnoreCase(MusicUtil.EVENTUAL))
- result = eventualPut(queryObject);
- else if (consistency.equalsIgnoreCase(MusicUtil.CRITICAL)) {
- String lockId = jsonDeleteObj.getConsistencyInfo().get("lockId");
- if(lockId == null) {
- logger.error(EELFLoggerDelegate.errorLogger,"LockId cannot be null. Create lock reference or"
- + " use ATOMIC instead of CRITICAL", ErrorSeverity.FATAL, ErrorTypes.MUSICSERVICEERROR);
-
- return new ReturnType(ResultType.FAILURE, "LockId cannot be null. Create lock "
- + "and acquire lock or use ATOMIC instead of CRITICAL");
- }
- result = criticalPut(jsonDeleteObj.getKeyspaceName(),
- jsonDeleteObj.getTableName(), jsonDeleteObj.getPrimarKeyValue(),
- queryObject, lockId, conditionInfo);
- } else if (consistency.equalsIgnoreCase(MusicUtil.ATOMIC)) {
- result = atomicPut(jsonDeleteObj.getKeyspaceName(),
- jsonDeleteObj.getTableName(), jsonDeleteObj.getPrimarKeyValue(),
- queryObject, conditionInfo);
- } else if(consistency.equalsIgnoreCase(MusicUtil.EVENTUAL_NB)) {
- result = eventualPut_nb(queryObject, jsonDeleteObj.getKeyspaceName(),
- jsonDeleteObj.getTableName(), jsonDeleteObj.getPrimarKeyValue());
- }
-
- return result;
- }
-
-
-}