Make MusicCore non-static 37/78137/5 dev-cassandra-only
authorMohammad Salehe <salehe@cs.toronto.edu>
Fri, 8 Feb 2019 16:58:35 +0000 (11:58 -0500)
committerMohammad Salehe <salehe@cs.toronto.edu>
Mon, 25 Feb 2019 03:23:39 +0000 (22:23 -0500)
Make MusicCore and other dependencies (MusicDataStoreHandle) non-static

For compatibility, MusicCore still has a singleton instance that is statically instantiated and can be used as needed by legacy users.

These changes should be made in calling sites (legacy users using singleton):
MusicDataStoreHandle.getDSHandle() -> MusicCore.getInstanceDSHandle()

Change-Id: I02b67f316dc21a1498157bc68cc32bf76d3ec01e
Issue-ID: MUSIC-148
Signed-off-by: Mohammad Salehe <salehe@cs.toronto.edu>
src/main/java/org/onap/music/conductor/conditionals/MusicConditional.java
src/main/java/org/onap/music/datastore/CassandraClusterBuilder.java [new file with mode: 0644]
src/main/java/org/onap/music/datastore/Condition.java
src/main/java/org/onap/music/datastore/MusicDataStore.java
src/main/java/org/onap/music/datastore/MusicDataStoreHandle.java
src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java
src/main/java/org/onap/music/main/MusicCore.java
src/main/java/org/onap/music/service/impl/MusicCassaCore.java
src/test/java/org/onap/music/unittests/MusicDataStoreTest.java
src/test/java/org/onap/music/unittests/TestCassaLockStore.java

index 839fbbe..debd270 100644 (file)
@@ -33,6 +33,7 @@ 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.MusicLockingException;
 import org.onap.music.main.MusicCore;
 import org.onap.music.main.MusicUtil;
 import org.onap.music.main.ResultType;
@@ -123,15 +124,15 @@ public class MusicConditional {
                ReturnType lockAcqResult = MusicCore.acquireLock(fullyQualifiedKey, lockId);
                if (lockAcqResult.getResult().equals(ResultType.SUCCESS)) {
                                try {
-                                       results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(queryBank.get(MusicUtil.SELECT));
+                                       results = MusicCore.getInstanceDSHandle().executeQuorumConsistencyGet(queryBank.get(MusicUtil.SELECT));
                                } catch (Exception e) {
                                        return new ReturnType(ResultType.FAILURE, e.getMessage());
                                }
                                if (results.all().isEmpty()) {
-                                       MusicDataStoreHandle.getDSHandle().executePut(queryBank.get(MusicUtil.INSERT), "critical");
+                                       MusicCore.getInstanceDSHandle().executePut(queryBank.get(MusicUtil.INSERT), "critical");
                                        return new ReturnType(ResultType.SUCCESS, "insert");
                                } else {
-                                       MusicDataStoreHandle.getDSHandle().executePut(queryBank.get(MusicUtil.UPDATE), "critical");
+                                       MusicCore.getInstanceDSHandle().executePut(queryBank.get(MusicUtil.UPDATE), "critical");
                                        return new ReturnType(ResultType.SUCCESS, "update");
                                }
                        } else {
@@ -179,7 +180,7 @@ public class MusicConditional {
                try {
                        ReturnType lockAcqResult = MusicCore.acquireLockWithLease(key, lockId, leasePeriod);
                        if (lockAcqResult.getResult().equals(ResultType.SUCCESS)) {
-                               Row row  = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(queryBank.get(MusicUtil.SELECT)).one();
+                               Row row  = MusicCore.getInstanceDSHandle().executeQuorumConsistencyGet(queryBank.get(MusicUtil.SELECT)).one();
                                
                                if(row != null) {
                                        Map<String, String> updatedValues = cascadeColumnUpdateSpecific(row, cascadeColumnValues, casscadeColumnName, planId);
@@ -192,14 +193,14 @@ public class MusicConditional {
                                        update.addValue(MusicUtil.convertToActualDataType(DataType.text(), vector_ts));
                                        update.addValue(MusicUtil.convertToActualDataType(DataType.text(), primaryKeyValue));
                                        try {
-                                               MusicDataStoreHandle.getDSHandle().executePut(update, "critical");
+                                               MusicCore.getInstanceDSHandle().executePut(update, "critical");
                                        } catch (Exception ex) {
                                                return new ReturnType(ResultType.FAILURE, ex.getMessage());
                                        }
                                }else {
                                        return new ReturnType(ResultType.FAILURE,"Cannot find data related to key: "+primaryKey);
                                }
-                               MusicDataStoreHandle.getDSHandle().executePut(queryBank.get(MusicUtil.UPSERT), "critical");
+                               MusicCore.getInstanceDSHandle().executePut(queryBank.get(MusicUtil.UPSERT), "critical");
                                return new ReturnType(ResultType.SUCCESS, "update success");
 
                        } else {
diff --git a/src/main/java/org/onap/music/datastore/CassandraClusterBuilder.java b/src/main/java/org/onap/music/datastore/CassandraClusterBuilder.java
new file mode 100644 (file)
index 0000000..f6c9da1
--- /dev/null
@@ -0,0 +1,100 @@
+package org.onap.music.datastore;
+
+import com.datastax.driver.core.Cluster;
+import com.datastax.driver.core.Metadata;
+import com.datastax.driver.core.Session;
+import com.datastax.driver.core.exceptions.NoHostAvailableException;
+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.MusicServiceException;
+import org.onap.music.main.MusicUtil;
+
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+
+public class CassandraClusterBuilder {
+    private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CassandraClusterBuilder.class);
+
+    private static Cluster createCassandraCluster(String address) throws NoHostAvailableException {
+        Cluster cluster = Cluster.builder().withPort(9042)
+                .withCredentials(MusicUtil.getCassName(), MusicUtil.getCassPwd())
+                .addContactPoint(address).build();
+        Metadata metadata = cluster.getMetadata();
+        logger.info(EELFLoggerDelegate.applicationLogger, "Connected to cassa cluster "
+                + metadata.getClusterName() + " at " + address);
+        return cluster;
+    }
+    /**
+     *
+     * @return
+     */
+    private static ArrayList<String> getAllPossibleLocalIps() {
+        ArrayList<String> allPossibleIps = new ArrayList<String>();
+        try {
+            Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
+            while (en.hasMoreElements()) {
+                NetworkInterface ni = (NetworkInterface) en.nextElement();
+                Enumeration<InetAddress> ee = ni.getInetAddresses();
+                while (ee.hasMoreElements()) {
+                    InetAddress ia = (InetAddress) ee.nextElement();
+                    allPossibleIps.add(ia.getHostAddress());
+                }
+            }
+        } catch (SocketException e) {
+            logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), AppMessages.CONNCECTIVITYERROR, ErrorSeverity.ERROR, ErrorTypes.CONNECTIONERROR);
+        }catch(Exception e) {
+            logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), ErrorSeverity.ERROR, ErrorTypes.GENERALSERVICEERROR);
+        }
+        return allPossibleIps;
+    }
+
+    /**
+     * This method iterates through all available local IP addresses and tries to connect to first successful one
+     */
+    public static Cluster connectToLocalCassandraCluster() {
+        ArrayList<String> localAddrs = getAllPossibleLocalIps();
+        localAddrs.add(0, "localhost");
+        logger.info(EELFLoggerDelegate.applicationLogger,
+                "Connecting to cassa cluster: Iterating through possible ips:"
+                        + getAllPossibleLocalIps());
+        for (String address: localAddrs) {
+            try {
+                return createCassandraCluster(address);
+            } catch (NoHostAvailableException e) {
+                logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(),AppMessages.HOSTUNAVAILABLE, ErrorSeverity.ERROR, ErrorTypes.CONNECTIONERROR);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * This method connects to cassandra cluster on specific address.
+     *
+     * @param address
+     */
+    public static Cluster connectToRemoteCassandraCluster(String address) throws MusicServiceException {
+        try {
+            return createCassandraCluster(address);
+        } catch (Exception ex) {
+            logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(),AppMessages.CASSANDRACONNECTIVITY, ErrorSeverity.ERROR, ErrorTypes.SERVICEUNAVAILABLE);
+            throw new MusicServiceException(
+                    "Error while connecting to Cassandra cluster.. " + ex.getMessage());
+        }
+    }
+
+    public static Cluster connectSmart(String cassaHost) throws MusicServiceException {
+        if (cassaHost.equals("localhost")) {
+            Cluster cluster = CassandraClusterBuilder.connectToLocalCassandraCluster();
+            return cluster;
+        } else {
+            Cluster cluster = CassandraClusterBuilder.connectToRemoteCassandraCluster(MusicUtil.getMyCassaHost());
+            return cluster;
+        }
+
+    }
+}
index 2399490..4faafb7 100644 (file)
@@ -31,24 +31,21 @@ import org.onap.music.service.impl.MusicCassaCore;
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
 
-
-
-    public class Condition {
-        Map<String, Object> conditions;
-        PreparedQueryObject selectQueryForTheRow;
-        private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(Condition.class);
-       //private static MusicCoreService musicCore = MusicCassaCore.getInstance();
-
-        public Condition(Map<String, Object> conditions, PreparedQueryObject selectQueryForTheRow) {
-            this.conditions = conditions;
-            this.selectQueryForTheRow = selectQueryForTheRow;
-        }
-
-        public boolean testCondition() throws Exception {
-            // first generate the row
-            ResultSet results = MusicCore.quorumGet(selectQueryForTheRow);
-            Row row = results.one();
-            return MusicDataStoreHandle.getDSHandle().doesRowSatisfyCondition(row, conditions);
-        }
+public class Condition {
+    Map<String, Object> conditions;
+    PreparedQueryObject selectQueryForTheRow;
+    private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(Condition.class);
+   //private static MusicCoreService musicCore = MusicCassaCore.getInstance();
+
+    public Condition(Map<String, Object> conditions, PreparedQueryObject selectQueryForTheRow) {
+        this.conditions = conditions;
+        this.selectQueryForTheRow = selectQueryForTheRow;
     }
 
+    public boolean testCondition() throws Exception {
+        // first generate the row
+        ResultSet results = MusicCore.quorumGet(selectQueryForTheRow);
+        Row row = results.one();
+        return MusicDataStore.doesRowSatisfyCondition(row, conditions);
+    }
+}
index 1ea1005..deb65ed 100644 (file)
@@ -64,13 +64,6 @@ public class MusicDataStore {
     }
 
 
-    /**
-     * Constructs DataStore by connecting to local Cassandra
-     */
-    public MusicDataStore() {
-        connectToLocalCassandraCluster();
-    }
-
     /**
      * Constructs DataStore by providing existing cluster and session
      * @param cluster
@@ -81,94 +74,6 @@ public class MusicDataStore {
         this.cluster = cluster;
     }
 
-    /**
-     * Constructs DataStore by connecting to provided remote Cassandra
-     * @param remoteAddress
-     * @throws MusicServiceException
-     */
-    public MusicDataStore(String remoteAddress) {
-        try {
-            connectToRemoteCassandraCluster(remoteAddress);
-        } catch (MusicServiceException e) {
-            logger.error(EELFLoggerDelegate.errorLogger, e.getMessage());
-        }
-    }
-
-    private void createCassandraSession(String address) throws NoHostAvailableException {
-        cluster = Cluster.builder().withPort(9042)
-                .withCredentials(MusicUtil.getCassName(), MusicUtil.getCassPwd())
-                .addContactPoint(address).build();
-        Metadata metadata = cluster.getMetadata();
-        logger.info(EELFLoggerDelegate.applicationLogger, "Connected to cassa cluster "
-                + metadata.getClusterName() + " at " + address);
-        session = cluster.connect();
-    }
-
-    /**
-     *
-     * @return
-     */
-    private ArrayList<String> getAllPossibleLocalIps() {
-        ArrayList<String> allPossibleIps = new ArrayList<String>();
-        try {
-            Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
-            while (en.hasMoreElements()) {
-                NetworkInterface ni = (NetworkInterface) en.nextElement();
-                Enumeration<InetAddress> ee = ni.getInetAddresses();
-                while (ee.hasMoreElements()) {
-                    InetAddress ia = (InetAddress) ee.nextElement();
-                    allPossibleIps.add(ia.getHostAddress());
-                }
-            }
-        } catch (SocketException e) {
-            logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), AppMessages.CONNCECTIVITYERROR, ErrorSeverity.ERROR, ErrorTypes.CONNECTIONERROR);
-        }catch(Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), ErrorSeverity.ERROR, ErrorTypes.GENERALSERVICEERROR);
-        }
-        return allPossibleIps;
-    }
-
-    /**
-     * This method iterates through all available local IP addresses and tries to connect to first successful one
-     */
-    private void connectToLocalCassandraCluster() {
-        ArrayList<String> localAddrs = getAllPossibleLocalIps();
-        localAddrs.add(0, "localhost");
-        logger.info(EELFLoggerDelegate.applicationLogger,
-                        "Connecting to cassa cluster: Iterating through possible ips:"
-                                        + getAllPossibleLocalIps());
-        for (String address: localAddrs) {
-            try {
-                createCassandraSession(address);
-                break;
-            } catch (NoHostAvailableException e) {
-                logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(),AppMessages.HOSTUNAVAILABLE, ErrorSeverity.ERROR, ErrorTypes.CONNECTIONERROR);
-            }
-        }
-    }
-
-    /**
-     * This method connects to cassandra cluster on specific address.
-     * 
-     * @param address
-     */
-    private void connectToRemoteCassandraCluster(String address) throws MusicServiceException {
-        try {
-            createCassandraSession(address);
-        } catch (Exception ex) {
-            logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(),AppMessages.CASSANDRACONNECTIVITY, ErrorSeverity.ERROR, ErrorTypes.SERVICEUNAVAILABLE);
-            throw new MusicServiceException(
-                            "Error while connecting to Cassandra cluster.. " + ex.getMessage());
-        }
-    }
-
-    /**
-     *
-     */
-    public void close() {
-        session.close();
-    }
-
     /**
      * 
      * @param keyspace
@@ -203,7 +108,7 @@ public class MusicDataStore {
      * @param colType
      * @return
      */
-    public Object getColValue(Row row, String colName, DataType colType) {
+    public static Object getColValue(Row row, String colName, DataType colType) {
 
         switch (colType.getName()) {
             case VARCHAR:
@@ -237,7 +142,7 @@ public class MusicDataStore {
        return data;
     }
 
-    public boolean doesRowSatisfyCondition(Row row, Map<String, Object> condition) throws Exception {
+    public static boolean doesRowSatisfyCondition(Row row, Map<String, Object> condition) throws Exception {
         ColumnDefinitions colInfo = row.getColumnDefinitions();
 
         for (Map.Entry<String, Object> entry : condition.entrySet()) {
@@ -453,5 +358,10 @@ public class MusicDataStore {
             TimeMeasureInstance.instance().exit();
         }
     }
+
+    @Deprecated
+    public void close() {
+        session.close();
+    }
 }
 
index ebd6213..0b44df3 100644 (file)
@@ -24,10 +24,11 @@ package org.onap.music.datastore;
 import java.util.HashMap;
 import java.util.Map;
 
+import com.datastax.driver.core.Cluster;
+import com.datastax.driver.core.Session;
 import org.onap.music.eelf.logging.EELFLoggerDelegate;
 import org.onap.music.exceptions.MusicServiceException;
 import org.onap.music.main.MusicUtil;
-import org.onap.music.service.impl.MusicCassaCore;
 
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.TableMetadata;
@@ -37,33 +38,12 @@ public class MusicDataStoreHandle {
         public static MusicDataStore mDstoreHandle = null;
         private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicDataStoreHandle.class);
 
-    /**
-     *
-     * @param remoteAddress
-     * @return
-     */
-    public static MusicDataStore getDSHandle(String remoteAddress) {
-        logger.info(EELFLoggerDelegate.applicationLogger,"Acquiring data store handle");
-        long start = System.currentTimeMillis();
-        if (mDstoreHandle == null) {
-            try {
-                MusicUtil.loadProperties();
-            } catch (Exception e) {
-                logger.error(EELFLoggerDelegate.errorLogger, "No properties file defined. Falling back to default.");
-            }
-            mDstoreHandle = new MusicDataStore(remoteAddress);
-        }
-        long end = System.currentTimeMillis();
-        logger.info(EELFLoggerDelegate.applicationLogger,"Time taken to acquire data store handle:" + (end - start) + " ms");
-        return mDstoreHandle;
-    }
-
     /**
      * 
      * @return
      * @throws MusicServiceException 
      */
-    public static MusicDataStore getDSHandle() throws MusicServiceException {
+    private static MusicDataStore getDSHandle() throws MusicServiceException {
                
         logger.info(EELFLoggerDelegate.applicationLogger,"Acquiring data store handle");
         long start = System.currentTimeMillis();
@@ -73,12 +53,11 @@ public class MusicDataStoreHandle {
                } catch (Exception e) {
                        logger.error(EELFLoggerDelegate.errorLogger, "No properties file defined. Falling back to default.");
                }
-            // Quick Fix - Best to put this into every call to getDSHandle?
-            if (MusicUtil.getMyCassaHost().equals("localhost")) {
-                mDstoreHandle = new MusicDataStore();
-            } else {
-                mDstoreHandle = new MusicDataStore(MusicUtil.getMyCassaHost());
-            }
+            // Quick Fix - Best to put this into every call to getInstanceDSHandle?
+            Cluster cluster = CassandraClusterBuilder.connectSmart(MusicUtil.getMyCassaHost());
+            Session session = cluster.connect();
+            mDstoreHandle = new MusicDataStore(cluster, session);
+
         }
         if(mDstoreHandle.getSession() == null) {
                String message = "Connection to Cassandra has not been enstablished."
index 6e0b61a..2c1bdb1 100644 (file)
@@ -1,16 +1,22 @@
 package org.onap.music.lockingservice.cassandra;
 
+import java.io.IOError;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.datastax.driver.core.Cluster;
+import com.datastax.driver.core.Session;
+import org.onap.music.datastore.CassandraClusterBuilder;
 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 com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
+import org.onap.music.main.MusicUtil;
 import org.onap.music.util.TimeMeasureInstance;
 
 /*
@@ -21,7 +27,8 @@ public class CassaLockStore {
        
        private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(CassaLockStore.class);
        private static String table_prepend_name = "lockQ_";
-       
+       private MusicDataStore dsHandle;
+
        public class LockObject{
                public String lockRef;
                public String createTime;
@@ -30,19 +37,13 @@ public class CassaLockStore {
                        this.lockRef = lockRef;
                        this.acquireTime = acquireTime;
                        this.createTime = createTime;
-                       
                }
        }
-       MusicDataStore dsHandle;
-       public CassaLockStore() {
-               dsHandle = new MusicDataStore();
-       }
-       
+
        public CassaLockStore(MusicDataStore dsHandle) {
                this.dsHandle=dsHandle;
        }
 
-    
        /**
         * 
         * This method creates a shadow locking table for every main table in Cassandra. This table tracks all information regarding locks. 
@@ -304,6 +305,4 @@ public class CassaLockStore {
             TimeMeasureInstance.instance().exit();
         }
        }
-       
-
 }
index 5a77df7..533fb9f 100644 (file)
 package org.onap.music.main;
 
 
-import java.io.StringWriter;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
 
-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 com.datastax.driver.core.*;
+import org.onap.music.datastore.*;
 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.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.MusicLockState;
-import org.onap.music.lockingservice.cassandra.CassaLockStore.LockObject;
 import org.onap.music.service.MusicCoreService;
 import org.onap.music.service.impl.MusicCassaCore;
 
-import com.datastax.driver.core.ColumnDefinitions;
-import com.datastax.driver.core.ColumnDefinitions.Definition;
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.TableMetadata;
-
 
 /**
  * This class .....
@@ -60,94 +43,132 @@ import com.datastax.driver.core.TableMetadata;
  */
 public class MusicCore {
 
-    public static CassaLockStore mLockHandle = null;
     private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicCore.class);
     private static boolean unitTestRun=true;
-    
-private static MusicCoreService musicCore = MusicCassaCore.getInstance();
-       
-       
+
+       public static CassaLockStore mLockHandle = null;
+       private static MusicDataStore mDependantDataStoreHandle = null;
+       private static MusicCoreService mMusicCore = null;
+
+       public static MusicCoreService getSingletonInstance() {
+               /* Hacks to make singleton instance backward-compatible
+                  Some clients of MusicCore, set the data-store handle directly on MusicDataStoreHandle and
+                  lock-store handle on mLockHandle static field. We should watch for changes in these and
+                  create new Core instance in case they have changed
+                */
+               if (MusicDataStoreHandle.mDstoreHandle != null &&
+                       mDependantDataStoreHandle != MusicDataStoreHandle.mDstoreHandle) {
+                               // Use externally set data-store and lock-store handle
+                               mDependantDataStoreHandle = MusicDataStoreHandle.mDstoreHandle;
+                               mMusicCore = new MusicCassaCore(mDependantDataStoreHandle, mLockHandle);
+               }
+               else if (mMusicCore == null) {
+                       String address = MusicUtil.getMyCassaHost();
+                       Cluster cluster;
+                       try {
+                               cluster = CassandraClusterBuilder.connectSmart(MusicUtil.getMyCassaHost());
+                       } catch (MusicServiceException e) {
+                               logger.error(EELFLoggerDelegate.errorLogger, "Can not connect to Cassandra cluster: " + address);
+                               return null;
+                       }
+                       Metadata metadata = cluster.getMetadata();
+                       logger.info(EELFLoggerDelegate.applicationLogger, "Connected to Cassandra cluster "
+                                       + metadata.getClusterName() + " at " + address);
+                       Session session = cluster.connect();
+
+                       mMusicCore = new MusicCassaCore(cluster, session);
+               }
+
+               return mMusicCore;
+       }
+
        public static ReturnType acquireLock(String fullyQualifiedKey, String lockReference) throws MusicLockingException, MusicQueryException, MusicServiceException {
-               return musicCore.acquireLock(fullyQualifiedKey, lockReference);
+               return getSingletonInstance().acquireLock(fullyQualifiedKey, lockReference);
        }
        
        public static ReturnType acquireLockWithLease(String key, String lockReference, long leasePeriod) throws MusicLockingException, MusicQueryException, MusicServiceException {
-               return musicCore.acquireLockWithLease(key, lockReference, leasePeriod);
+               return getSingletonInstance().acquireLockWithLease(key, lockReference, leasePeriod);
        }
        
        public static String createLockReference(String fullyQualifiedKey) {
-               return musicCore.createLockReference(fullyQualifiedKey);
+               return getSingletonInstance().createLockReference(fullyQualifiedKey);
        }
        
        public static String createLockReference(String fullyQualifiedKey, boolean isWriteLock) {
-           return musicCore.createLockReference(fullyQualifiedKey, isWriteLock);
+           return getSingletonInstance().createLockReference(fullyQualifiedKey, isWriteLock);
        }
        
        public static MusicLockState  forciblyReleaseLock(String fullyQualifiedKey, String lockReference) throws MusicLockingException, MusicServiceException, MusicQueryException{
-               return musicCore.forciblyReleaseLock(fullyQualifiedKey, lockReference);
+               return getSingletonInstance().forciblyReleaseLock(fullyQualifiedKey, lockReference);
        }
        
        public static ResultType createTable(String keyspace, String table, PreparedQueryObject tableQueryObject, String consistency) throws MusicServiceException {
-               return musicCore.createTable(keyspace, table, tableQueryObject, consistency);
+               return getSingletonInstance().createTable(keyspace, table, tableQueryObject, consistency);
        }
        
        public static ResultSet quorumGet(PreparedQueryObject query) {
-               return musicCore.quorumGet(query);              
+               return getSingletonInstance().quorumGet(query);
        }
        
        public static String whoseTurnIsIt(String fullyQualifiedKey) {
-               return musicCore.whoseTurnIsIt(fullyQualifiedKey);
+               return getSingletonInstance().whoseTurnIsIt(fullyQualifiedKey);
        }
        
        public static MusicLockState destroyLockRef(String fullyQualifiedKey, String lockReference) {
-               return musicCore.destroyLockRef(fullyQualifiedKey, lockReference);
+               return getSingletonInstance().destroyLockRef(fullyQualifiedKey, lockReference);
        }
        
        public static  MusicLockState  voluntaryReleaseLock(String fullyQualifiedKey, String lockReference) throws MusicLockingException {
-               return musicCore.voluntaryReleaseLock(fullyQualifiedKey, lockReference);
+               return getSingletonInstance().voluntaryReleaseLock(fullyQualifiedKey, lockReference);
        }
        
        public static ReturnType eventualPut(PreparedQueryObject queryObject) {
-               return musicCore.eventualPut(queryObject);
+               return getSingletonInstance().eventualPut(queryObject);
        }
        
        public static ReturnType criticalPut(String keyspace, String table, String primaryKeyValue,
             PreparedQueryObject queryObject, String lockReference, Condition conditionInfo) {
-               return musicCore.criticalPut(keyspace, table, primaryKeyValue, queryObject, lockReference, conditionInfo);
+               return getSingletonInstance().criticalPut(keyspace, table, primaryKeyValue, queryObject, lockReference, conditionInfo);
        }
        
        public static ResultType nonKeyRelatedPut(PreparedQueryObject queryObject, String consistency) throws MusicServiceException {
-               return musicCore.nonKeyRelatedPut(queryObject, consistency);
+               return getSingletonInstance().nonKeyRelatedPut(queryObject, consistency);
        }
        
        public static ResultSet get(PreparedQueryObject queryObject) throws MusicServiceException{
-               return musicCore.get(queryObject);
+               return getSingletonInstance().get(queryObject);
        }
        
        public static ResultSet criticalGet(String keyspace, String table, String primaryKeyValue,
             PreparedQueryObject queryObject, String lockReference) throws MusicServiceException{
-               return musicCore.criticalGet(keyspace, table, primaryKeyValue, queryObject,lockReference);
+               return getSingletonInstance().criticalGet(keyspace, table, primaryKeyValue, queryObject,lockReference);
        }
        
        public static ReturnType atomicPut(String keyspaceName, String tableName, String primaryKey,
             PreparedQueryObject queryObject, Condition conditionInfo) throws MusicLockingException, MusicQueryException, MusicServiceException 
        {
-               return musicCore.atomicPut(keyspaceName, tableName, primaryKey, queryObject, conditionInfo);
+               return getSingletonInstance().atomicPut(keyspaceName, tableName, primaryKey, queryObject, conditionInfo);
        }
        
     public static ResultSet atomicGet(String keyspaceName, String tableName, String primaryKey,
             PreparedQueryObject queryObject) throws MusicServiceException, MusicLockingException, MusicQueryException {
-       return musicCore.atomicGet(keyspaceName, tableName, primaryKey, queryObject);
+       return getSingletonInstance().atomicGet(keyspaceName, tableName, primaryKey, queryObject);
     }
     
     public static List<String> getLockQueue(String fullyQualifiedKey)
                        throws MusicServiceException, MusicQueryException, MusicLockingException{
-       return musicCore.getLockQueue(fullyQualifiedKey);
+       return getSingletonInstance().getLockQueue(fullyQualifiedKey);
     }
     
        public static long getLockQueueSize(String fullyQualifiedKey)
                        throws MusicServiceException, MusicQueryException, MusicLockingException {
-               return musicCore.getLockQueueSize(fullyQualifiedKey);
+               return getSingletonInstance().getLockQueueSize(fullyQualifiedKey);
        }
 
+       public static MusicDataStore getInstanceDSHandle() {
+               MusicCoreService singletonInstance = getSingletonInstance();
+               if (singletonInstance instanceof MusicCassaCore)
+                       return ((MusicCassaCore) singletonInstance).getDataStoreHandle();
+               return null;
+       }
 }
index e334748..2841b6d 100644 (file)
@@ -27,12 +27,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
-import java.util.UUID;
 
-import org.onap.music.datastore.MusicDataStore;
-import org.onap.music.datastore.MusicDataStoreHandle;
-import org.onap.music.datastore.Condition;
-import org.onap.music.datastore.PreparedQueryObject;
+import com.datastax.driver.core.*;
+import org.onap.music.datastore.*;
 import org.onap.music.eelf.logging.EELFLoggerDelegate;
 import org.onap.music.eelf.logging.format.AppMessages;
 import org.onap.music.eelf.logging.format.ErrorSeverity;
@@ -48,12 +45,7 @@ import org.onap.music.main.ResultType;
 import org.onap.music.main.ReturnType;
 import org.onap.music.service.MusicCoreService;
 
-import com.datastax.driver.core.ColumnDefinitions;
 import com.datastax.driver.core.ColumnDefinitions.Definition;
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.TableMetadata;
 import org.onap.music.util.TimeMeasureInstance;
 
 
@@ -63,46 +55,74 @@ import org.onap.music.util.TimeMeasureInstance;
  *
  */
 public class MusicCassaCore implements MusicCoreService {
+    private CassaLockStore mLockStoreHandle = null;
+    private MusicDataStore mDataStoreHandle = null;
 
-    public static CassaLockStore mLockHandle = null;;
     private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicCassaCore.class);
     private static boolean unitTestRun=true;
-    private static MusicCassaCore musicCassaCoreInstance = null;
-    
-    private MusicCassaCore() {
-       
-    }
-    public static MusicCassaCore getInstance() {
-       
-       if(musicCassaCoreInstance == null) {
-               musicCassaCoreInstance = new MusicCassaCore();
-       }
-       return musicCassaCoreInstance;
+
+    public MusicCassaCore(Cluster cassandraCluster, Session cassandraSession) {
+        try {
+            MusicUtil.loadProperties();
+        } catch (Exception e) {
+            logger.error(EELFLoggerDelegate.errorLogger, "No properties file defined. Falling back to default.");
+        }
+
+        {
+            logger.info(EELFLoggerDelegate.applicationLogger, "Acquiring data store handle");
+            long start = System.currentTimeMillis();
+            if (mDataStoreHandle == null) {
+                mDataStoreHandle = new MusicDataStore(cassandraCluster, cassandraSession);
+            }
+            long end = System.currentTimeMillis();
+            logger.info(EELFLoggerDelegate.applicationLogger, "Time taken to acquire data store handle:" + (end - start) + " ms");
+        }
+        {
+            logger.info(EELFLoggerDelegate.applicationLogger,"Acquiring lock store handle");
+            long start = System.currentTimeMillis();
+
+            try {
+                mLockStoreHandle = new CassaLockStore(getDataStoreHandle());
+            } catch (Exception e) {
+                logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.LOCKHANDLE,ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
+            }
+            long end = System.currentTimeMillis();
+            logger.info(EELFLoggerDelegate.applicationLogger,"Time taken to acquire lock store handle:" + (end - start) + " ms");
+        }
     }
-    
-    public static CassaLockStore getLockingServiceHandle() throws MusicLockingException {
-        logger.info(EELFLoggerDelegate.applicationLogger,"Acquiring lock store handle");
-        long start = System.currentTimeMillis();
 
-        if (mLockHandle == null) {
+    public MusicCassaCore(MusicDataStore dataStore, CassaLockStore lockStore) {
+        mDataStoreHandle = dataStore;
+        mLockStoreHandle = lockStore;
+
+        if (lockStore == null)
+        {
+            logger.info(EELFLoggerDelegate.applicationLogger,"Acquiring lock store handle");
+            long start = System.currentTimeMillis();
+
             try {
-                mLockHandle = new CassaLockStore(MusicDataStoreHandle.getDSHandle());
+                mLockStoreHandle = new CassaLockStore(getDataStoreHandle());
             } catch (Exception e) {
-               logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.LOCKHANDLE,ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
-                throw new MusicLockingException("Failed to acquire Local store handle " + e);
+                logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.LOCKHANDLE,ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
             }
+            long end = System.currentTimeMillis();
+            logger.info(EELFLoggerDelegate.applicationLogger,"Time taken to acquire lock store handle:" + (end - start) + " ms");
         }
-        long end = System.currentTimeMillis();
-        logger.info(EELFLoggerDelegate.applicationLogger,"Time taken to acquire lock store handle:" + (end - start) + " ms");
-        return mLockHandle;
     }
 
+    public MusicDataStore getDataStoreHandle() {
+        return mDataStoreHandle;
+    }
+
+    public CassaLockStore getLockingServiceHandle() {
+        return mLockStoreHandle;
+    }
 
     public  String createLockReference(String fullyQualifiedKey) {
         return createLockReference(fullyQualifiedKey, true);
     }
 
-    public  String createLockReference(String fullyQualifiedKey, boolean isWriteLock) {
+    public String createLockReference(String fullyQualifiedKey, boolean isWriteLock) {
         TimeMeasureInstance.instance().enter("createLockReference");
         try {
             String[] splitString = fullyQualifiedKey.split("\\.");
@@ -115,7 +135,7 @@ public class MusicCassaCore implements MusicCoreService {
             String lockReference = null;
             try {
                 lockReference = "" + getLockingServiceHandle().genLockRefandEnQueue(keyspace, table, lockName, isWriteLock);
-            } catch (MusicLockingException | MusicServiceException | MusicQueryException e) {
+            } catch (MusicServiceException | MusicQueryException e) {
                 logger.info(EELFLoggerDelegate.applicationLogger, "Failed to create lock reference for" + lockName);
                 return null;
             }
@@ -129,7 +149,7 @@ public class MusicCassaCore implements MusicCoreService {
     }
 
 
-    public  ReturnType acquireLockWithLease(String fullyQualifiedKey, String lockReference, long leasePeriod) throws MusicLockingException, MusicQueryException, MusicServiceException  {
+    public ReturnType acquireLockWithLease(String fullyQualifiedKey, String lockReference, long leasePeriod) throws MusicLockingException, MusicQueryException, MusicServiceException  {
        evictExpiredLockHolder(fullyQualifiedKey,leasePeriod);
                return acquireLock(fullyQualifiedKey, lockReference);
     }
@@ -157,7 +177,7 @@ public class MusicCassaCore implements MusicCoreService {
                }       
     }
     
-    private static ReturnType isTopOfLockStore(String keyspace, String table,
+    private ReturnType isTopOfLockStore(String keyspace, String table,
                        String primaryKeyValue, String lockReference)
                        throws MusicLockingException, MusicQueryException, MusicServiceException {
         TimeMeasureInstance.instance().enter("isTopOfLockStore");
@@ -204,7 +224,7 @@ public class MusicCassaCore implements MusicCoreService {
         }
     }
 
-    public  ReturnType acquireLock(String fullyQualifiedKey, String lockReference) throws MusicLockingException, MusicQueryException, MusicServiceException {
+    public ReturnType acquireLock(String fullyQualifiedKey, String lockReference) throws MusicLockingException, MusicQueryException, MusicServiceException {
         TimeMeasureInstance.instance().enter("acquireLock");
         try {
             String[] splitString = fullyQualifiedKey.split("\\.");
@@ -222,7 +242,7 @@ public class MusicCassaCore implements MusicCoreService {
             String query = "select * from " + syncTable + " where key='" + fullyQualifiedKey + "';";
             PreparedQueryObject readQueryObject = new PreparedQueryObject();
             readQueryObject.appendQueryString(query);
-            ResultSet results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(readQueryObject);
+            ResultSet results = getDataStoreHandle().executeQuorumConsistencyGet(readQueryObject);
             if (results.all().size() != 0) {
                 logger.info("In acquire lock: Since there was a forcible release, need to sync quorum!");
                 try {
@@ -236,7 +256,7 @@ public class MusicCassaCore implements MusicCoreService {
                 String cleanQuery = "delete  from music_internal.unsynced_keys where key='" + fullyQualifiedKey + "';";
                 PreparedQueryObject deleteQueryObject = new PreparedQueryObject();
                 deleteQueryObject.appendQueryString(cleanQuery);
-                MusicDataStoreHandle.getDSHandle().executePut(deleteQueryObject, "critical");
+                getDataStoreHandle().executePut(deleteQueryObject, "critical");
             }
 
             getLockingServiceHandle().updateLockAcquireTime(keyspace, table, primaryKeyValue, lockReference);
@@ -259,7 +279,7 @@ public class MusicCassaCore implements MusicCoreService {
      * 
      * 
      */
-    public  ResultType createTable(String keyspace, String table, PreparedQueryObject tableQueryObject, String consistency) throws MusicServiceException {
+    public ResultType createTable(String keyspace, String table, PreparedQueryObject tableQueryObject, String consistency) throws MusicServiceException {
                boolean result = false;
        
                try {
@@ -279,19 +299,19 @@ public class MusicCassaCore implements MusicCoreService {
                        
                        queryObject.appendQueryString(tabQuery);
                        result = false;
-                       result = MusicDataStoreHandle.getDSHandle().executePut(queryObject, "eventual");
+                       result = getDataStoreHandle().executePut(queryObject, "eventual");
 
                
                        //create actual table
-                       result = MusicDataStoreHandle.getDSHandle().executePut(tableQueryObject, consistency);
-               } catch (MusicQueryException | MusicServiceException | MusicLockingException ex) {
+                       result = getDataStoreHandle().executePut(tableQueryObject, consistency);
+               } catch (MusicQueryException | MusicServiceException 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 {
+    private 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();
@@ -310,7 +330,7 @@ public class MusicCassaCore implements MusicCoreService {
         selectQuery.addValue(cqlFormattedPrimaryKeyValue);
         ResultSet results = null;
         try {
-            results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(selectQuery);
+            results = getDataStoreHandle().executeQuorumConsistencyGet(selectQuery);
             // write it back to a quorum
             Row row = results.one();
             ColumnDefinitions colInfo = row.getColumnDefinitions();
@@ -322,7 +342,7 @@ public class MusicCassaCore implements MusicCoreService {
                 if (colName.equals(primaryKeyName))
                     continue;
                 DataType colType = definition.getType();
-                Object valueObj = MusicDataStoreHandle.getDSHandle().getColValue(row, colName, colType);
+                Object valueObj = getDataStoreHandle().getColValue(row, colName, colType);
                 Object valueString = MusicUtil.convertToActualDataType(colType, valueObj);
                 fieldValueString.append(colName + " = ?");
                 updateQuery.addValue(valueString);
@@ -334,24 +354,21 @@ public class MusicCassaCore implements MusicCoreService {
                             + fieldValueString + " WHERE " + primaryKeyName + "= ? " + ";");
             updateQuery.addValue(cqlFormattedPrimaryKeyValue);
 
-            MusicDataStoreHandle.getDSHandle().executePut(updateQuery, "critical");
+            getDataStoreHandle().executePut(updateQuery, "critical");
         } catch (MusicServiceException | MusicQueryException e) {
                logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.QUERYERROR +""+updateQuery ,ErrorSeverity.MAJOR, ErrorTypes.QUERYERROR);
         }
     }
 
-
-
-
     /**
      * 
      * @param query
      * @return ResultSet
      */
-    public  ResultSet quorumGet(PreparedQueryObject query) {
+    public ResultSet quorumGet(PreparedQueryObject query) {
         ResultSet results = null;
         try {
-            results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(query);
+            results = getDataStoreHandle().executeQuorumConsistencyGet(query);
         } catch (MusicServiceException | MusicQueryException e) {
                logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.UNKNOWNERROR ,ErrorSeverity.MAJOR, ErrorTypes.GENERALSERVICEERROR);
         
@@ -375,7 +392,7 @@ public class MusicCassaCore implements MusicCoreService {
         try {
             LockObject lockObject = getLockingServiceHandle().peekLockQueue(keyspace, table, primaryKeyValue);
             return lockObject != null ? lockObject.lockRef : null;
-        } catch (MusicLockingException | MusicServiceException | MusicQueryException e) {
+        } catch (MusicServiceException | MusicQueryException e) {
                logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.LOCKINGERROR+fullyQualifiedKey ,ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
         }
         return null;
@@ -391,7 +408,7 @@ public class MusicCassaCore implements MusicCoreService {
         return st.nextToken("$");
     }
 
-    public  MusicLockState destroyLockRef(String fullyQualifiedKey, String lockReference) {
+    public MusicLockState destroyLockRef(String fullyQualifiedKey, String lockReference) {
         TimeMeasureInstance.instance().enter("destroyLockRef");
         try {
             long start = System.currentTimeMillis();
@@ -401,7 +418,7 @@ public class MusicCassaCore implements MusicCoreService {
             String primaryKeyValue = splitString[2];
             try {
                 getLockingServiceHandle().deQueueLockRef(keyspace, table, primaryKeyValue, lockReference);
-            } catch (MusicServiceException | MusicQueryException | MusicLockingException e) {
+            } catch (MusicServiceException | MusicQueryException e) {
                 logger.error(EELFLoggerDelegate.errorLogger, e.getMessage(), AppMessages.DESTROYLOCK + " " + primaryKeyValue + " " + lockReference, ErrorSeverity.CRITICAL, ErrorTypes.LOCKINGERROR);
                 logger.info(EELFLoggerDelegate.applicationLogger, "Lock not destroyed " + primaryKeyValue + " " + lockReference + " " + " :" + e.getMessage());
                 return new MusicLockState(MusicLockState.LockStatus.LOCKED, "");
@@ -415,7 +432,7 @@ public class MusicCassaCore implements MusicCoreService {
         }
     }
 
-    public   MusicLockState  voluntaryReleaseLock(String fullyQualifiedKey, String lockReference) throws MusicLockingException{
+    public MusicLockState voluntaryReleaseLock(String fullyQualifiedKey, String lockReference) throws MusicLockingException{
         TimeMeasureInstance.instance().enter("voluntaryReleaseLock");
         try {
             return destroyLockRef(fullyQualifiedKey, lockReference);
@@ -437,7 +454,7 @@ public class MusicCassaCore implements MusicCoreService {
                queryObject.addValue(fullyQualifiedKey);
                String insQuery = "insert into "+syncTable+" (key) values "+values+";";
         queryObject.appendQueryString(insQuery);
-        MusicDataStoreHandle.getDSHandle().executePut(queryObject, "critical");
+        getDataStoreHandle().executePut(queryObject, "critical");
 
         //now release the lock
                return destroyLockRef(fullyQualifiedKey, lockReference);
@@ -448,7 +465,7 @@ public class MusicCassaCore implements MusicCoreService {
      * @param lockName
      * @throws MusicLockingException 
      */
-    public  void deleteLock(String lockName) throws MusicLockingException {
+    public void deleteLock(String lockName) throws MusicLockingException {
                //deprecated
        }
 
@@ -460,10 +477,10 @@ public class MusicCassaCore implements MusicCoreService {
      * @return ReturnType
      * @throws MusicServiceException
      */
-    public  ReturnType eventualPut(PreparedQueryObject queryObject) {
+    public ReturnType eventualPut(PreparedQueryObject queryObject) {
         boolean result = false;
         try {
-            result = MusicDataStoreHandle.getDSHandle().executePut(queryObject, MusicUtil.EVENTUAL);
+            result = getDataStoreHandle().executePut(queryObject, MusicUtil.EVENTUAL);
         } catch (MusicServiceException | MusicQueryException ex) {
                logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage(), "[ERR512E] Failed to get ZK Lock Handle "  ,ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR);
             logger.error(EELFLoggerDelegate.errorLogger,ex.getMessage() + "  " + ex.getCause() + " " + ex);
@@ -475,7 +492,7 @@ public class MusicCassaCore implements MusicCoreService {
             return new ReturnType(ResultType.FAILURE, "Failure");
         }
     }
-    
+
     /**
      * 
      * @param keyspace
@@ -485,7 +502,7 @@ public class MusicCassaCore implements MusicCoreService {
      * @param lockReference
      * @return
      */
-    public  ReturnType criticalPut(String keyspace, String table, String primaryKeyValue,
+    public ReturnType criticalPut(String keyspace, String table, String primaryKeyValue,
                     PreparedQueryObject queryObject, String lockReference, Condition conditionInfo) {
         TimeMeasureInstance.instance().enter("criticalPut");
         try {
@@ -513,7 +530,7 @@ public class MusicCassaCore implements MusicCoreService {
 //                String query = queryObject.getQuery();
 //                query = query.replaceFirst("SET", "USING TIMESTAMP " + ts + " SET");
 //                queryObject.replaceQueryString(query);
-                MusicDataStore dsHandle = MusicDataStoreHandle.getDSHandle();
+                MusicDataStore dsHandle = getDataStoreHandle();
                 dsHandle.executePut(queryObject, MusicUtil.CRITICAL, lockOrdinal);
                 long end = System.currentTimeMillis();
                 logger.info(EELFLoggerDelegate.applicationLogger, "Time taken for the critical put " + primaryKeyValue + " " + lockReference + " :" + (end - start) + " ms");
@@ -540,12 +557,12 @@ public class MusicCassaCore implements MusicCoreService {
      * 
      * 
      */
-    public  ResultType nonKeyRelatedPut(PreparedQueryObject queryObject, String consistency) throws MusicServiceException {
+    public ResultType nonKeyRelatedPut(PreparedQueryObject queryObject, String consistency) throws MusicServiceException {
         // 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);
+            result = getDataStoreHandle().executePut(queryObject, consistency);
         } catch (MusicQueryException | MusicServiceException ex) {
                logger.error(EELFLoggerDelegate.errorLogger, ex.getMessage(), AppMessages.UNKNOWNERROR,
                     ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR);
@@ -561,10 +578,10 @@ public class MusicCassaCore implements MusicCoreService {
      * @return ResultSet
      * @throws MusicServiceException 
      */
-    public  ResultSet get(PreparedQueryObject queryObject) throws MusicServiceException {
+    public ResultSet get(PreparedQueryObject queryObject) throws MusicServiceException {
         ResultSet results = null;
         try {
-                       results = MusicDataStoreHandle.getDSHandle().executeOneConsistencyGet(queryObject);
+                       results = getDataStoreHandle().executeOneConsistencyGet(queryObject);
         } catch (MusicQueryException | MusicServiceException e) {
             logger.error(EELFLoggerDelegate.errorLogger,e.getMessage());
             throw new MusicServiceException(e.getMessage());
@@ -583,7 +600,7 @@ public class MusicCassaCore implements MusicCoreService {
      * @param lockReference lock ID to check if the resource is free to perform the operation.
      * @return ResultSet
      */
-    public  ResultSet criticalGet(String keyspace, String table, String primaryKeyValue,
+    public ResultSet criticalGet(String keyspace, String table, String primaryKeyValue,
                     PreparedQueryObject queryObject, String lockReference) throws MusicServiceException {
         ResultSet results = null;
         
@@ -591,7 +608,7 @@ public class MusicCassaCore implements MusicCoreService {
             ReturnType result = isTopOfLockStore(keyspace, table, primaryKeyValue, lockReference);
             if(result.getResult().equals(ResultType.FAILURE))
                        return null; // not top of the lock store q
-                results = MusicDataStoreHandle.getDSHandle().executeQuorumConsistencyGet(queryObject);
+                results = getDataStoreHandle().executeQuorumConsistencyGet(queryObject);
         } catch (MusicQueryException | MusicServiceException | MusicLockingException e) {
                        logger.error(EELFLoggerDelegate.errorLogger,e.getMessage(), AppMessages.UNKNOWNERROR  ,ErrorSeverity.WARN, ErrorTypes.MUSICSERVICEERROR);
         }
@@ -610,7 +627,7 @@ public class MusicCassaCore implements MusicCoreService {
      * @throws MusicServiceException 
      * @throws MusicQueryException 
      */
-    public  ReturnType atomicPut(String keyspaceName, String tableName, String primaryKey,
+    public ReturnType atomicPut(String keyspaceName, String tableName, String primaryKey,
                     PreparedQueryObject queryObject, Condition conditionInfo) throws MusicLockingException, MusicQueryException, MusicServiceException {
         TimeMeasureInstance.instance().enter("atomicPut");
         try {
@@ -710,7 +727,7 @@ public class MusicCassaCore implements MusicCoreService {
      * @throws MusicLockingException 
      * @throws MusicQueryException 
      */
-    public  ResultSet atomicGet(String keyspaceName, String tableName, String primaryKey,
+    public ResultSet atomicGet(String keyspaceName, String tableName, String primaryKey,
                     PreparedQueryObject queryObject) throws MusicServiceException, MusicLockingException, MusicQueryException {
         String fullyQualifiedKey = keyspaceName + "." + tableName + "." + primaryKey;
         String lockReference = createLockReference(fullyQualifiedKey);
index b739fa2..ef4e8f7 100644 (file)
@@ -59,7 +59,6 @@ public class MusicDataStoreTest {
         testObject.appendQueryString(CassandraCQL.dropKeyspace);
         dataStore.executePut(testObject, "eventual");
         dataStore.close();
-
     }
 
     @Test
index 4320609..ff048b3 100644 (file)
@@ -4,11 +4,16 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
+import com.datastax.driver.core.Cluster;
+import com.datastax.driver.core.Session;
+import org.onap.music.datastore.CassandraClusterBuilder;
+import org.onap.music.datastore.MusicDataStore;
 import org.onap.music.datastore.PreparedQueryObject;
 import org.onap.music.exceptions.MusicQueryException;
 import org.onap.music.exceptions.MusicServiceException;
 import org.onap.music.lockingservice.cassandra.CassaLockStore;
 import org.onap.music.main.MusicCore;
+import org.onap.music.main.MusicUtil;
 
 public class TestCassaLockStore {
        
@@ -17,7 +22,9 @@ public class TestCassaLockStore {
                
                
                try {
-                       CassaLockStore lockStore = new CassaLockStore();
+                       Cluster cluster = CassandraClusterBuilder.connectSmart(MusicUtil.getMyCassaHost());
+                       Session session = cluster.connect();
+                       CassaLockStore lockStore = new CassaLockStore(new MusicDataStore(cluster, session));
                        String keyspace = "ks_testLockStore";
                        String table = "table_testLockStore";