diff options
Diffstat (limited to 'src/main/java/org/onap/music/lockingservice/cassandra')
3 files changed, 0 insertions, 775 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 deleted file mode 100644 index 10898476..00000000 --- a/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java +++ /dev/null @@ -1,604 +0,0 @@ -/* - * ============LICENSE_START========================================== - * org.onap.music - * =================================================================== - * Copyright (c) 2017 AT&T Intellectual Property - * Modifications Copyright (C) 2019 IBM. - * =================================================================== - * 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.lockingservice.cassandra; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.onap.music.datastore.MusicDataStore; -import org.onap.music.datastore.PreparedQueryObject; -import org.onap.music.eelf.logging.EELFLoggerDelegate; -import org.onap.music.exceptions.MusicLockingException; -import org.onap.music.exceptions.MusicQueryException; -import org.onap.music.exceptions.MusicServiceException; -import org.onap.music.main.DeadlockDetectionUtil; -import org.onap.music.main.DeadlockDetectionUtil.OwnershipType; -import org.onap.music.main.MusicUtil; -import org.onap.music.main.ResultType; -import org.onap.music.main.ReturnType; -import com.datastax.driver.core.ResultSet; -import com.datastax.driver.core.Row; -import com.datastax.driver.core.Session; -import com.datastax.driver.extras.codecs.enums.EnumNameCodec; - -/* - * This is the lock store that is built on top of Cassandra that is used by MUSIC to maintain lock state. - */ - -public class CassaLockStore { - - private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CassaLockStore.class); - private static String table_prepend_name = "lockQ_"; - private MusicDataStore dsHandle; - - public CassaLockStore() { - dsHandle = new MusicDataStore(); - } - - public CassaLockStore(MusicDataStore dsHandle) { - this.dsHandle=dsHandle; - } - public class LockObject{ - private boolean isLockOwner; - private String lockRef; - private String createTime; - private String acquireTime; - private LockType locktype; - // Owner is the self-declared client which "owns" this row. It is used for deadlock detection. It is not (directly) related to isLockOwner. - private String owner; - public LockObject(boolean isLockOwner, String lockRef, String createTime, String acquireTime, LockType locktype, String owner) { - this.setIsLockOwner(isLockOwner); - this.setLockRef(lockRef); - this.setAcquireTime(acquireTime); - this.setCreateTime(createTime); - this.setLocktype(locktype); - this.setOwner(owner); - } - public boolean getIsLockOwner() { - return isLockOwner; - } - public void setIsLockOwner(boolean isLockOwner) { - this.isLockOwner = isLockOwner; - } - public String getAcquireTime() { - return acquireTime; - } - public void setAcquireTime(String acquireTime) { - this.acquireTime = acquireTime; - } - public String getCreateTime() { - return createTime; - } - public void setCreateTime(String createTime) { - this.createTime = createTime; - } - public String getLockRef() { - return lockRef; - } - public void setLockRef(String lockRef) { - this.lockRef = lockRef; - } - public LockType getLocktype() { - return locktype; - } - public void setLocktype(LockType locktype) { - this.locktype = locktype; - } - public String getOwner() { - return owner; - } - public void setOwner(String owner) { - this.owner = owner; - } - } - - /** - * - * This method creates a shadow locking table for every main table in Cassandra. This table tracks all information regarding locks. - * @param keyspace of the application. - * @param table of the application. - * @return true if the operation was successful. - * @throws MusicServiceException - * @throws MusicQueryException - */ - public boolean createLockQueue(String keyspace, String table) throws MusicServiceException, MusicQueryException { - logger.info(EELFLoggerDelegate.applicationLogger, - "Create lock queue/table for " + keyspace+"."+table); - table = table_prepend_name+table; - String tabQuery = "CREATE TABLE IF NOT EXISTS "+keyspace+"."+table - + " ( key text, lockReference bigint, createTime text, acquireTime text, guard bigint static, " - + "lockType text, owner text, PRIMARY KEY ((key), lockReference) ) " - + "WITH CLUSTERING ORDER BY (lockReference ASC);"; - PreparedQueryObject queryObject = new PreparedQueryObject(); - - queryObject.appendQueryString(tabQuery); - boolean result; - result = dsHandle.executePut(queryObject, "eventual"); - return result; - } - - /** - * This method creates a lock reference for each invocation. The lock references are monotonically increasing timestamps. - * @param keyspace of the locks. - * @param table of the locks. - * @param lockName is the primary key of the lock table - * @param lockType is the type of lock (read/write) - * @param owner is the owner of the lock (optional, for deadlock detection) - * @return the UUID lock reference. - * @throws MusicServiceException - * @throws MusicQueryException - */ - public String genLockRefandEnQueue(String keyspace, String table, String lockName, LockType locktype, String owner) throws MusicServiceException, MusicQueryException, MusicLockingException { - return genLockRefandEnQueue(keyspace, table, lockName, locktype, owner, 0); - } - - private String genLockRefandEnQueue(String keyspace, String table, String lockName, LockType locktype, String owner, int count) throws MusicServiceException, MusicQueryException, MusicLockingException { - logger.info(EELFLoggerDelegate.applicationLogger, - "Create " + locktype + " lock reference for " + keyspace + "." + table + "." + lockName); - String lockTable =""; - lockTable = table_prepend_name+table; - - PreparedQueryObject queryObject = new PreparedQueryObject(); - String selectQuery = "SELECT guard FROM " + keyspace + "." + lockTable + " WHERE key=?;"; - - queryObject.addValue(lockName); - queryObject.appendQueryString(selectQuery); - ResultSet gqResult = dsHandle.executeOneConsistencyGet(queryObject); - List<Row> latestGuardRow = gqResult.all(); - - long prevGuard = 0; - long lockRef = 1; - if (!latestGuardRow.isEmpty()) { - prevGuard = latestGuardRow.get(0).getLong(0); - lockRef = prevGuard + 1; - } - - long lockEpochMillis = System.currentTimeMillis(); - - logger.info(EELFLoggerDelegate.applicationLogger, - "Created lock reference for " + keyspace + "." + lockTable + "." + lockName + ":" + lockRef); - - queryObject = new PreparedQueryObject(); - - String insQuery = "BEGIN BATCH" + - " UPDATE " + keyspace + "." + lockTable + - " SET guard=? WHERE key=? IF guard = " + (prevGuard == 0 ? "NULL" : "?") +";" + - " INSERT INTO " + keyspace + "." + lockTable + - "(key, lockReference, createTime, acquireTime, lockType, owner) VALUES (?,?,?,?,?,?) IF NOT EXISTS; APPLY BATCH;"; - - queryObject.addValue(lockRef); - queryObject.addValue(lockName); - if (prevGuard != 0) - queryObject.addValue(prevGuard); - - queryObject.addValue(lockName); - queryObject.addValue(lockRef); - queryObject.addValue(String.valueOf(lockEpochMillis)); - queryObject.addValue("0"); - queryObject.addValue(locktype); - queryObject.addValue(owner); - queryObject.appendQueryString(insQuery); - boolean pResult = dsHandle.executePut(queryObject, "critical"); - if (!pResult) {// couldn't create lock ref, retry - count++; - if (count > MusicUtil.getRetryCount()) { - logger.warn(EELFLoggerDelegate.applicationLogger, "Unable to create lock reference"); - throw new MusicLockingException("Unable to create lock reference"); - } - return genLockRefandEnQueue(keyspace, table, lockName, locktype, owner, count); - } - return "$" + keyspace + "." + table + "." + lockName + "$" + String.valueOf(lockRef); - } - - /** - * Returns a result set containing the list of clients waiting for a particular lock - * - * @param keyspace - * @param table - * @param key - * @return list of lockrefs in the queue - * @throws MusicServiceException - * @throws MusicQueryException - */ - public List<String> getLockQueue(String keyspace, String table, String key) - throws MusicServiceException, MusicQueryException { - logger.info(EELFLoggerDelegate.applicationLogger, - "Getting the queue for " + keyspace + "." + table + "." + key); - table = table_prepend_name + table; - String selectQuery = "select * from " + keyspace + "." + table + " where key='" + key + "';"; - PreparedQueryObject queryObject = new PreparedQueryObject(); - queryObject.appendQueryString(selectQuery); - ResultSet rs = dsHandle.executeOneConsistencyGet(queryObject); - ArrayList<String> lockQueue = new ArrayList<>(); - for (Row row : rs) { - lockQueue.add(Long.toString(row.getLong("lockReference"))); - } - return lockQueue; - } - - - /** - * Returns a result set containing the list of clients waiting for a particular lock - * - * @param keyspace - * @param table - * @param key - * @return size of lockrefs queue - * @throws MusicServiceException - * @throws MusicQueryException - */ - public long getLockQueueSize(String keyspace, String table, String key) - throws MusicServiceException, MusicQueryException { - logger.info(EELFLoggerDelegate.applicationLogger, - "Getting the queue size for " + keyspace + "." + table + "." + key); - table = table_prepend_name + table; - String selectQuery = "select count(*) from " + keyspace + "." + table + " where key='" + key + "';"; - PreparedQueryObject queryObject = new PreparedQueryObject(); - queryObject.appendQueryString(selectQuery); - ResultSet rs = dsHandle.executeOneConsistencyGet(queryObject); - return rs.one().getLong("count"); - } - - - /** - * This method returns the top of lock table/queue for the key. - * - * @param keyspace of the application. - * @param table of the application. - * @param key is the primary key of the application table - * @return the UUID lock reference. Returns LockObject.isLockOwner=false if there is no owner or the - * lock doesn't exist - * @throws MusicServiceException - * @throws MusicQueryException - */ - public LockObject peekLockQueue(String keyspace, String table, String key) - throws MusicServiceException, MusicQueryException { - logger.info(EELFLoggerDelegate.applicationLogger, - "Peek in lock table for " + keyspace + "." + table + "." + key); - table = table_prepend_name + table; - String selectQuery = "select * from " + keyspace + "." + table + " where key='" + key + "' LIMIT 1;"; - PreparedQueryObject queryObject = new PreparedQueryObject(); - queryObject.appendQueryString(selectQuery); - ResultSet results = dsHandle.executeOneConsistencyGet(queryObject); - Row row = results.one(); - if (row == null || row.isNull("lockReference")) { - return new LockObject(false, null, null, null, null, null); - } - String lockReference = "" + row.getLong("lockReference"); - String createTime = row.getString("createTime"); - String acquireTime = row.getString("acquireTime"); - LockType locktype = row.get("lockType", LockType.class); - String owner = row.getString("owner"); - - return new LockObject(true, lockReference, createTime, acquireTime, locktype, owner); - } - - public List<String> getCurrentLockHolders(String keyspace, String table, String key) - throws MusicServiceException, MusicQueryException { - logger.info(EELFLoggerDelegate.applicationLogger, - "Getting lockholders in lock table for " + keyspace + "." + table + "." + key); - String origTable = table; - table = table_prepend_name + table; - String selectQuery = "select * from " + keyspace + "." + table + " where key=?;"; - List<String> lockHolders = new ArrayList<>(); - PreparedQueryObject queryObject = new PreparedQueryObject(); - queryObject.appendQueryString(selectQuery); - queryObject.addValue(key); - ResultSet rs = dsHandle.executeOneConsistencyGet(queryObject); - boolean topOfQueue = true; - StringBuilder lock = new StringBuilder(). - append("$").append(keyspace).append(".").append(origTable). - append(".").append(key).append("$"); - StringBuilder lockReference = new StringBuilder(); - for (Row row : rs) { - if ( row.isNull("lockReference") ) { - return lockHolders; - } - lockReference.append(lock).append(row.getLong("lockReference")); - if (row.get("lockType", LockType.class)!=LockType.WRITE) { - if (topOfQueue) { - lockHolders.add(lockReference.toString()); - break; - } else { - break; - } - } - // read lock - lockHolders.add(lockReference.toString()); - - topOfQueue = false; - lockReference.delete(0,lockReference.length()); - } - return lockHolders; - } - - /** - * Determine if the lock is a valid current lock holder. - * - * @param keyspace - * @param table - * @param key - * @param lockRef - * @return true if lockRef is a lock owner of key - * @throws MusicServiceException - * @throws MusicQueryException - */ - public boolean isLockOwner(String keyspace, String table, String key, String lockRef) - throws MusicServiceException, MusicQueryException { - logger.info(EELFLoggerDelegate.applicationLogger, - "Checking in lock table for " + keyspace + "." + table + "." + key); - table = table_prepend_name + table; - String selectQuery = - "select * from " + keyspace + "." + table + " where key=?;"; - PreparedQueryObject queryObject = new PreparedQueryObject(); - queryObject.appendQueryString(selectQuery); - queryObject.addValue(key); - ResultSet rs = dsHandle.executeOneConsistencyGet(queryObject); - - boolean topOfQueue = true; - for (Row row : rs) { - String lockReference = "" + row.getLong("lockReference"); - if (row.get("lockType", LockType.class)==LockType.WRITE) { - if (topOfQueue && lockRef.equals(lockReference)) { - return true; - } else { - return false; - } - } - if (lockRef.equals(lockReference)) { - return true; - } - topOfQueue = false; - } - logger.info(EELFLoggerDelegate.applicationLogger, "Could not find " + lockRef - + " in the lock queue. It has expired and no longer exists."); - return false; - } - - /** - * Determine if the lock is a valid current lock holder. - * - * @param keyspace - * @param table - * @param key - * @param lockRef - * @return true if lockRef is a lock owner of key - * @throws MusicServiceException - * @throws MusicQueryException - */ - public LockObject getLockInfo(String keyspace, String table, String key, String lockRef) - throws MusicServiceException, MusicQueryException { - logger.info(EELFLoggerDelegate.applicationLogger, - "Checking in lock table for " + keyspace + "." + table + "." + key); - String lockQ_table = table_prepend_name + table; - String selectQuery = - "select * from " + keyspace + "." + lockQ_table + " where key=? and lockReference=?;"; - PreparedQueryObject queryObject = new PreparedQueryObject(); - queryObject.appendQueryString(selectQuery); - queryObject.addValue(key); - queryObject.addValue(Long.parseLong(lockRef)); - ResultSet rs = dsHandle.executeOneConsistencyGet(queryObject); - Row row = rs.one(); - if (row == null || row.isNull("lockReference")) { - return null; - } - - String lockReference = "" + row.getLong("lockReference"); - String createTime = row.getString("createTime"); - String acquireTime = row.getString("acquireTime"); - LockType locktype = row.get("lockType", LockType.class); - boolean isLockOwner = isLockOwner(keyspace, table, key, lockRef); - String owner = row.getString("owner"); - - return new LockObject(isLockOwner, lockReference, createTime, acquireTime, locktype, owner); - } - - - - /** - * This method removes the lock ref from the lock table/queue for the key. - * - * @param keyspace of the application. - * @param table of the application. - * @param key is the primary key of the application table - * @param lockReference the lock reference that needs to be dequeued. - * @throws MusicServiceException - * @throws MusicQueryException - * @throws MusicLockingException - */ - public void deQueueLockRef(String keyspace, String table, String key, String lockReference, int n) - throws MusicServiceException, MusicQueryException, MusicLockingException { - String prependTable = table_prepend_name + table; - PreparedQueryObject queryObject = new PreparedQueryObject(); - Long lockReferenceL = Long.parseLong(lockReference.substring(lockReference.lastIndexOf("$") + 1)); - String deleteQuery = "delete from " + keyspace + "." + prependTable + " where key='" + key - + "' AND lockReference =" + lockReferenceL + " IF EXISTS;"; - queryObject.appendQueryString(deleteQuery); - logger.info(EELFLoggerDelegate.applicationLogger, "Removing lock for key: "+key+ " and reference: "+lockReference); - try { - dsHandle.executePut(queryObject, "critical"); - logger.info(EELFLoggerDelegate.applicationLogger, - "Lock removed for key: " + key + " and reference: " + lockReference); - } catch (MusicServiceException ex) { - logger.error(logger, ex.getMessage(), ex); - logger.error(EELFLoggerDelegate.applicationLogger, - "Exception while deQueueLockRef for lockname: " + key + " reference:" + lockReference); - if (n > 1) { - logger.info(EELFLoggerDelegate.applicationLogger, "Trying again..."); - deQueueLockRef(keyspace, table, key, lockReference, n - 1); - } else { - logger.error(EELFLoggerDelegate.applicationLogger, - "deQueueLockRef failed for lockname: " + key + " reference:" + lockReference); - logger.error(logger, ex.getMessage(), ex); - throw new MusicLockingException("Error while deQueueLockRef: " + ex.getMessage()); - } - } - } - - - public void updateLockAcquireTime(String keyspace, String table, String key, String lockReference) { - table = table_prepend_name + table; - Long lockReferenceL = Long.parseLong(lockReference); - String updateQuery = "update " + keyspace + "." + table + " set acquireTime='" + System.currentTimeMillis() - + "' where key='" + key + "' AND lockReference = " + lockReferenceL + " IF EXISTS;"; - - //cannot use executePut because we need to ignore music timestamp adjustments for lock store - dsHandle.getSession().execute(updateQuery); - } - - public boolean checkForDeadlock(String keyspace, String table, String lockName, LockType locktype, String owner, boolean forAcquire) throws MusicServiceException, MusicQueryException { - if (locktype.equals(LockType.READ)) return false; - if (owner==null || owner.length()==0) return false; - - String lockTable = table_prepend_name + table; - PreparedQueryObject queryObject = new PreparedQueryObject(); - queryObject.appendQueryString("SELECT key, acquiretime, owner FROM " + keyspace + "." + lockTable); - queryObject.appendQueryString(" WHERE lockType = ? ALLOW FILTERING"); - queryObject.addValue(LockType.WRITE); - - DeadlockDetectionUtil ddu = new DeadlockDetectionUtil(); - - ResultSet rs = dsHandle.executeQuorumConsistencyGet(queryObject); - logger.debug("rs has " + rs.getAvailableWithoutFetching() + (rs.isFullyFetched()?"":" (or more!)") ); - Iterator<Row> it = rs.iterator(); - while (it.hasNext()) { - Row row = it.next(); - logger.debug("key = " + row.getString("key") + ", time = " + row.getString("acquiretime") + ", owner = " + row.getString("owner") ); - ddu.setExisting(row.getString("key"), row.getString("owner"), ("0".equals(row.getString("acquiretime")))?OwnershipType.CREATED:OwnershipType.ACQUIRED); - } - boolean deadlock = ddu.checkForDeadlock(lockName, owner, forAcquire?OwnershipType.ACQUIRED:OwnershipType.CREATED); - if (deadlock) logger.warn("Deadlock detected when " + owner + " tried to create lock on " + keyspace + "." + lockTable + "." + lockName); - return deadlock; - } - - public List<String> getAllLocksForOwner(String ownerId, String keyspace, String table) throws MusicServiceException, MusicQueryException { - List<String> toRet = new ArrayList<String>(); - String lockTable = table_prepend_name + table; - PreparedQueryObject queryObject = new PreparedQueryObject(); - queryObject.appendQueryString("SELECT key, lockreference FROM " + keyspace + "." + lockTable); - queryObject.appendQueryString(" WHERE owner = '" + ownerId + "' ALLOW FILTERING"); - - ResultSet rs = dsHandle.executeQuorumConsistencyGet(queryObject); - Iterator<Row> it = rs.iterator(); - while (it.hasNext()) { - Row row = it.next(); - toRet.add(row.getString("key") + "$" + row.getLong("lockreference")); - } - return toRet; - } - - public ReturnType promoteLock(String keyspace, String table, String key, String lockRef) - throws MusicLockingException, MusicServiceException, MusicQueryException { - String lockqtable = table_prepend_name + table; - String selectQuery = "select * from " + keyspace + "." + lockqtable + " where key=?;"; - - PreparedQueryObject queryObject = new PreparedQueryObject(); - queryObject.appendQueryString(selectQuery); - queryObject.addValue(key); - ResultSet rs = dsHandle.executeOneConsistencyGet(queryObject); - - long refToPromote = Long.parseLong(lockRef); - - boolean topOfQueue = true; - boolean readBlock = false; - boolean seenLockToPromote = false; - boolean promotionOngoing = false; - long readBlockStart = 0; - long readBlockEnd = 0; - - - for (Row row : rs) { - long ref = row.getLong("lockreference"); - LockType lockType = row.get("lockType", LockType.class); - - if (refToPromote==ref) { - if (promotionOngoing) { - return new ReturnType(ResultType.FAILURE, "Can't promote, already promoting another lockref."); - } - seenLockToPromote = true; - if (!topOfQueue) { - readBlockStart = ref; - readBlockEnd = ref; - break; - } - } else if (!seenLockToPromote && refToPromote<ref) { - return new ReturnType(ResultType.FAILURE, "Lockref does not exist."); - } - - if (lockType==LockType.READ || lockType==LockType.PROMOTING) { - if (!readBlock) { - readBlockStart = ref; - readBlock = true; - } - if (readBlock) { - readBlockEnd = ref; - } - if (lockType==LockType.PROMOTING) { - promotionOngoing = true; - } - } - - if (lockType==LockType.WRITE) { - if (refToPromote==ref) { - return new ReturnType(ResultType.FAILURE, "Lockref is already write."); - } - if (readBlock) { - readBlock = false; - promotionOngoing = false; - if (seenLockToPromote) { - break; - } - //can no longer be lock holder after this - topOfQueue = false; - } - } - } - - if (readBlockStart<=refToPromote && refToPromote<=readBlockEnd) { - if (readBlockStart==refToPromote && refToPromote==readBlockEnd) { - promoteLockTo(keyspace, lockqtable, key, lockRef, LockType.WRITE); - return new ReturnType(ResultType.SUCCESS, "Lock has successfully been upgraded."); - } - promoteLockTo(keyspace, lockqtable, key, lockRef, LockType.PROMOTING); - return new ReturnType(ResultType.FAILURE, "Your lock upgrade is in progress. Check again to see if successful."); - } - - //shouldn't reach here? - return new ReturnType(ResultType.FAILURE,"Promotion failed."); - } - - private void promoteLockTo(String keyspace, String table, String key, String lockRef, LockType newLockType) - throws MusicServiceException, MusicQueryException { - PreparedQueryObject queryObject = - new PreparedQueryObject("UPDATE " + keyspace + "." + table + " SET lockType=? WHERE key='" + key - + "' AND lockReference = " + lockRef + " IF EXISTS;", newLockType); - - //cannot use executePut because we need to ignore music timestamp adjustments for lock store - dsHandle.executePut(queryObject, MusicUtil.QUORUM); - } - - - -} diff --git a/src/main/java/org/onap/music/lockingservice/cassandra/LockType.java b/src/main/java/org/onap/music/lockingservice/cassandra/LockType.java deleted file mode 100644 index 432b1c51..00000000 --- a/src/main/java/org/onap/music/lockingservice/cassandra/LockType.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * ============LICENSE_START========================================== - * org.onap.music - * =================================================================== - * Copyright (c) 2019 AT&T Intellectual Property - * =================================================================== - * 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.lockingservice.cassandra; - - -public enum LockType { - WRITE, READ, PROMOTING; -} - diff --git a/src/main/java/org/onap/music/lockingservice/cassandra/MusicLockState.java b/src/main/java/org/onap/music/lockingservice/cassandra/MusicLockState.java deleted file mode 100644 index 00187dc8..00000000 --- a/src/main/java/org/onap/music/lockingservice/cassandra/MusicLockState.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * ============LICENSE_START========================================== - * org.onap.music - * =================================================================== - * Copyright (c) 2017 AT&T Intellectual Property - * =================================================================== - * 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.lockingservice.cassandra; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInput; -import java.io.ObjectInputStream; -import java.io.ObjectOutput; -import java.io.ObjectOutputStream; -import java.io.Serializable; -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; - -// the state variable that will be stored in the locking service, capturing the transitions of -public class MusicLockState implements Serializable { - public enum LockStatus { - UNLOCKED, BEING_LOCKED, LOCKED - };// captures the state of the lock - - private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicLockState.class); - private LockStatus lockStatus; - private boolean needToSyncQuorum = false; - private String lockHolder; - private long leasePeriod = Long.MAX_VALUE, leaseStartTime = -1; - private String errorMessage = null; - - public MusicLockState(String errorMessage) { - this.errorMessage = errorMessage; - } - - public MusicLockState(LockStatus lockStatus, String lockHolder) { - this.lockStatus = lockStatus; - this.lockHolder = lockHolder; - } - - public MusicLockState(LockStatus lockStatus, String lockHolder, boolean needToSyncQuorum) { - this.lockStatus = lockStatus; - this.lockHolder = lockHolder; - this.needToSyncQuorum = needToSyncQuorum; - } - - - public long getLeasePeriod() { - return leasePeriod; - } - - public boolean isNeedToSyncQuorum() { - return needToSyncQuorum; - } - - - - public void setLeasePeriod(long leasePeriod) { - this.leasePeriod = leasePeriod; - } - - - public long getLeaseStartTime() { - return leaseStartTime; - } - - - public void setLeaseStartTime(long leaseStartTime) { - this.leaseStartTime = leaseStartTime; - } - - - - public LockStatus getLockStatus() { - return lockStatus; - } - - public void setLockStatus(LockStatus lockStatus) { - this.lockStatus = lockStatus; - } - - public String getLockHolder() { - return lockHolder; - } - - public void setLockHolder(String lockHolder) { - this.lockHolder = lockHolder; - } - - public String getErrorMessage() { - return errorMessage; - } - - public byte[] serialize() { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutput out = null; - try { - out = new ObjectOutputStream(bos); - out.writeObject(this); - } catch (IOException e) { - logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(),AppMessages.IOERROR, ErrorSeverity.ERROR, - ErrorTypes.CONNECTIONERROR, e); - } - return bos.toByteArray(); - } - - public static MusicLockState deSerialize(byte[] data) { - ByteArrayInputStream bis = new ByteArrayInputStream(data); - Object o = null; - ObjectInput in = null; - try { - in = new ObjectInputStream(bis); - o = in.readObject(); - } catch (ClassNotFoundException | IOException e) { - logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(),AppMessages.UNKNOWNERROR, ErrorSeverity - .ERROR, ErrorTypes.UNKNOWN, e); - } - return (MusicLockState) o; - } -} |