Implement first comparison point tests 23/72123/3
authorMohammad Salehe <salehe@cs.toronto.edu>
Wed, 7 Nov 2018 21:05:22 +0000 (16:05 -0500)
committerMohammad Salehe <salehe@cs.toronto.edu>
Fri, 21 Dec 2018 06:04:37 +0000 (01:04 -0500)
Implement ComparisonPoints1 benchmarks to
test 4 different put scenarios:
- Music Entry Consistency
- Music Eventual
- Music Sequential Consistent (Using LWT)
- Pure Consistent (Using LWT)

Change-Id: Id9052a0b14686be93189021e19f2dc293188c52b
Issue-ID: MUSIC-148
Signed-off-by: Mohammad Salehe <salehe@cs.toronto.edu>
src/main/java/org/onap/music/main/VotingAppJar.java [deleted file]
src/main/java/org/onap/music/service/impl/MusicCassaCore.java
src/test/java/org/onap/music/unittests/ComparisonPoints1.java [new file with mode: 0644]
src/test/java/org/onap/music/unittests/TestVotingApp.java

diff --git a/src/main/java/org/onap/music/main/VotingAppJar.java b/src/main/java/org/onap/music/main/VotingAppJar.java
deleted file mode 100644 (file)
index 1c47563..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.onap.music.main;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.onap.music.datastore.PreparedQueryObject;
-import org.onap.music.exceptions.MusicLockingException;
-import org.onap.music.exceptions.MusicQueryException;
-import org.onap.music.exceptions.MusicServiceException;
-import org.onap.music.main.MusicCore;
-
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-
-/**
- *
- */
-public class VotingAppJar 
-{
-       String keyspaceName;
-       String tableName;
-       
-       public VotingAppJar() throws MusicServiceException {
-               keyspaceName = "VotingAppForMusic";
-               tableName = "votevount";
-               
-               createVotingKeyspace();
-               System.out.println("Created keyspaces");
-               createVotingTable();
-               System.out.println("Created tables");
-               
-               createEntryForCandidate("Popeye");
-               createEntryForCandidate("Judy");
-               createEntryForCandidate("Flash");
-               createEntryForCandidate("Mickey");
-               System.out.println("Created candidates");
-       }
-
-       private void createVotingKeyspace() throws MusicServiceException {
-               
-               Map<String,Object> replicationInfo = new HashMap<String, Object>();
-               replicationInfo.put("'class'", "'SimpleStrategy'");
-               replicationInfo.put("'replication_factor'", 1);
-               
-               PreparedQueryObject queryObject = new PreparedQueryObject();
-               queryObject.appendQueryString(
-                "CREATE KEYSPACE " + keyspaceName + " WITH REPLICATION = " + replicationInfo.toString().replaceAll("=", ":"));
-               
-               try {
-                       MusicCore.nonKeyRelatedPut(queryObject, "eventual");
-               } catch (MusicServiceException e) {
-                       if (e.getMessage().equals("Keyspace votingappformusic already exists")) {
-                               // ignore
-                       } else {
-                               throw(e);
-                       }                       
-               }
-       }
-       
-    private void createVotingTable() throws MusicServiceException {
-       PreparedQueryObject queryObject = new PreparedQueryObject();
-               queryObject.appendQueryString(
-                "CREATE TABLE " + keyspaceName + "." + tableName + " (name text PRIMARY KEY, count varint);");
-               
-               try {
-                       MusicCore.createTable(keyspaceName, tableName, queryObject, "eventual");                
-               } catch (MusicServiceException e) {
-                       if (e.getMessage().equals("Table votingappformusic.votevount already exists")) {
-                               //ignore
-                       } else {
-                               throw(e);
-                       }
-               }
-       }
-
-       private void createEntryForCandidate(String candidateName) throws MusicServiceException {
-               PreparedQueryObject queryObject = new PreparedQueryObject();
-               queryObject.appendQueryString(
-                "INSERT INTO " + keyspaceName + "." + tableName + " (name, count) "
-                               + "VALUES ('"+candidateName+"', 0);");
-               
-               MusicCore.nonKeyRelatedPut(queryObject, "eventual");
-       }
-
-       public void vote() throws MusicLockingException, MusicQueryException, MusicServiceException {
-               updateVoteCount("Popeye",5);
-               updateVoteCount("Judy",7);
-               updateVoteCount("Mickey",8);
-               updateVoteCount("Flash",2);
-       }
-       
-       private void updateVoteCount(String candidateName, int numVotes) throws MusicLockingException, MusicQueryException, MusicServiceException {
-               PreparedQueryObject queryObject = new PreparedQueryObject();
-               queryObject.appendQueryString(
-                "INSERT INTO " + keyspaceName + "." + tableName + " (name, count) "
-                               + "VALUES ('"+candidateName+"', "+numVotes+");");
-               MusicCore.atomicPut(keyspaceName, tableName, candidateName, queryObject, null);
-       }
-
-       private void readAllVotes() throws MusicServiceException {
-               PreparedQueryObject queryObject = new PreparedQueryObject();
-               queryObject.appendQueryString("SELECT * FROM " + keyspaceName + "." + tableName);
-               ResultSet rs = MusicCore.get(queryObject);
-               for(Row candidate : rs.all()) {
-                       System.out.println(candidate.getString("name") + " - " + candidate.getVarint("count"));
-               }
-       }
-       
-       public static void main( String[] args ) throws Exception {
-        VotingAppJar vHandle = new VotingAppJar();
-        vHandle.vote();
-        vHandle.readAllVotes();
-    }
-
-}
index fcf0280..f897c18 100644 (file)
@@ -243,8 +243,7 @@ public class MusicCassaCore implements MusicCoreService {
                        
                        String tabQuery = "CREATE TABLE IF NOT EXISTS "+keyspace+"."+table
                                        + " ( key text,PRIMARY KEY (key) );";
-                       System.out.println(tabQuery);
-                       PreparedQueryObject queryObject = new PreparedQueryObject(); 
+                       PreparedQueryObject queryObject = new PreparedQueryObject();
                        
                        queryObject.appendQueryString(tabQuery);
                        result = false;
diff --git a/src/test/java/org/onap/music/unittests/ComparisonPoints1.java b/src/test/java/org/onap/music/unittests/ComparisonPoints1.java
new file mode 100644 (file)
index 0000000..1f74d39
--- /dev/null
@@ -0,0 +1,239 @@
+package org.onap.music.unittests;
+
+import com.datastax.driver.core.ResultSet;
+import org.onap.music.datastore.PreparedQueryObject;
+import org.onap.music.exceptions.MusicLockingException;
+import org.onap.music.exceptions.MusicQueryException;
+import org.onap.music.exceptions.MusicServiceException;
+import org.onap.music.main.MusicCore;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ */
+public class ComparisonPoints1
+{
+    String keyspaceName;
+    int BENCH_TIMES = 100;
+
+    public ComparisonPoints1() {
+        keyspaceName = "ComparisonPoints1_"+System.currentTimeMillis();
+    }
+
+    private void initialize() throws MusicServiceException {
+        createKeyspace();
+        System.out.println("Created keyspaces");
+    }
+
+    private int readAge(String tableName, String name) throws MusicServiceException {
+        PreparedQueryObject query = new PreparedQueryObject();
+        query.appendQueryString("SELECT age FROM " + keyspaceName + "." + tableName + " WHERE name = ?;");
+        query.addValue(name);
+        ResultSet rs = MusicCore.get(query);
+        return rs.one().getInt("age");
+    }
+
+    private void check(String tableName, String name1, int age) throws MusicServiceException {
+        int readage = readAge(tableName, name1);
+        if (age != readage)
+            System.out.println("Inconsistency: age = " + readage + " != " + age);
+    }
+
+    private void performMusicEntryConsistentPut(String tableName, String name, int age) throws MusicServiceException, MusicLockingException, MusicQueryException {
+
+        PreparedQueryObject query = new PreparedQueryObject();
+        query.appendQueryString(
+                "INSERT INTO " + keyspaceName + "." + tableName + " (name, age) "
+                        + "VALUES (?, ?);");
+        query.addValue(name);
+        query.addValue(age);
+
+        MusicCore.atomicPut(keyspaceName, tableName, name, query, null);
+    }
+
+    private void warmup() throws Exception {
+        String tableName = "warmup";
+        System.out.println("Warming Up");
+        createTable(tableName);
+        System.out.println("Created tables");
+        Thread.sleep(1000);
+
+        long btime = System.currentTimeMillis();
+        for (int i = 0; i < BENCH_TIMES; i++) {
+            String name = "Joe" + i;
+            int age = i + 10;
+            performMusicEntryConsistentPut(tableName, name, age);
+//            check(tableName, name, age);
+        }
+        long bdur = System.currentTimeMillis() - btime;
+
+        System.out.println("done");
+    }
+
+    private void testMusicEntryConsistentPut() throws Exception {
+        String tableName = "mentry2";
+        System.out.println("Test music entry consistent put 2");
+        createTable(tableName);
+        System.out.println("Created tables");
+        Thread.sleep(1000);
+
+        long btime = System.currentTimeMillis();
+        for (int i = 0; i < BENCH_TIMES; i++) {
+            String name = "Joe" + i;
+            int age = i + 10;
+            performMusicEntryConsistentPut(tableName, name, age);
+//            check(tableName, name, age);
+        }
+        long bdur = System.currentTimeMillis() - btime;
+
+        System.out.println("done " + ((float)bdur / BENCH_TIMES));
+    }
+
+    private void performMusicSequentialConsistentPut(String tableName, String name, int age) throws MusicServiceException, MusicLockingException, MusicQueryException {
+        PreparedQueryObject query = new PreparedQueryObject();
+        query.appendQueryString(
+                "INSERT INTO " + keyspaceName + "." + tableName + " (name, age) "
+                        + "VALUES (?, ?) IF NOT EXISTS;");
+        query.addValue(name);
+        query.addValue(age);
+
+        MusicCore.atomicPut(keyspaceName, tableName, name, query, null);
+    }
+
+    private void testMusicSequentialConsistentPut() throws Exception {
+        String tableName = "mseq";
+        System.out.println("Test music sequential consistent put");
+        createTable(tableName);
+        System.out.println("Created tables");
+        Thread.sleep(1000);
+
+        long btime = System.currentTimeMillis();
+        for (int i = 0; i < BENCH_TIMES; i++) {
+            String name = "Joe" + i;
+            int age = i + 10;
+            performMusicSequentialConsistentPut(tableName, name, age);
+//            check(tableName, name, age);
+        }
+        long bdur = System.currentTimeMillis() - btime;
+
+        System.out.println("done " + ((float)bdur / BENCH_TIMES));
+    }
+
+    private void performEventualPut(String tableName, String name, int age) throws MusicServiceException, MusicLockingException, MusicQueryException {
+        PreparedQueryObject query = new PreparedQueryObject();
+        query.appendQueryString(
+                "INSERT INTO " + keyspaceName + "." + tableName + " (name, age) "
+                        + "VALUES (?, ?);");
+        query.addValue(name);
+        query.addValue(age);
+
+        MusicCore.eventualPut(query);
+    }
+
+    private void testEventualPut() throws Exception {
+        String tableName = "eventual";
+        System.out.println("Test eventual put");
+        createTable(tableName);
+        System.out.println("Created tables");
+        Thread.sleep(1000);
+
+        long btime = System.currentTimeMillis();
+        for (int i = 0; i < BENCH_TIMES; i++) {
+            String name = "Joe" + i;
+            int age = i + 10;
+            performEventualPut(tableName, name, age);
+//            check(tableName, name, age);
+        }
+        long bdur = System.currentTimeMillis() - btime;
+
+        System.out.println("done " + ((float)bdur / BENCH_TIMES));
+    }
+
+    private void performPureConsistentPut(String tableName, String name, int age) throws MusicServiceException, MusicLockingException, MusicQueryException {
+        PreparedQueryObject query = new PreparedQueryObject();
+        query.appendQueryString(
+                "INSERT INTO " + keyspaceName + "." + tableName + " (name, age) "
+                        + "VALUES (?, ?) IF NOT EXISTS;");
+        query.addValue(name);
+        query.addValue(age);
+
+        MusicCore.eventualPut(query);
+    }
+
+    private void testPureConsistentPut() throws Exception {
+        String tableName = "pure";
+        System.out.println("Performing pure consistent put");
+        createTable(tableName);
+        System.out.println("Created tables");
+        Thread.sleep(1000);
+
+        long btime = System.currentTimeMillis();
+        for (int i = 0; i < BENCH_TIMES; i++) {
+            String name = "Joe" + i;
+            int age = i + 10;
+            performPureConsistentPut(tableName, name, age);
+//            check(tableName, name, age);
+        }
+        long bdur = System.currentTimeMillis() - btime;
+
+        System.out.println("done " + ((float)bdur / BENCH_TIMES));
+    }
+
+    private void createKeyspace() throws MusicServiceException {
+              Map<String,Object> replicationInfo = new HashMap<String, Object>();
+              replicationInfo.put("'class'", "'SimpleStrategy'");
+              replicationInfo.put("'replication_factor'", 3);
+              
+              PreparedQueryObject queryObject = new PreparedQueryObject();
+              queryObject.appendQueryString(
+                "CREATE KEYSPACE " + keyspaceName + " WITH REPLICATION = " + replicationInfo.toString().replaceAll("=", ":"));
+              
+              try {
+                     MusicCore.nonKeyRelatedPut(queryObject, "eventual");
+              } catch (MusicServiceException e) {
+                   throw(e);
+              }
+       }
+       
+    private void createTable(String tableName) throws MusicServiceException {
+        PreparedQueryObject queryObject = new PreparedQueryObject();
+        queryObject.appendQueryString(
+                "CREATE TABLE " + keyspaceName + "." + tableName + " (name text PRIMARY KEY, age int);");
+
+        try {
+            MusicCore.createTable(keyspaceName, tableName, queryObject, "eventual");
+        } catch (MusicServiceException e) {
+            throw (e);
+        }
+    }
+
+       public static void main( String[] args ) throws Exception {
+           ComparisonPoints1 cp1 = new ComparisonPoints1();
+           cp1.initialize();
+           Thread.sleep(2000);
+
+           cp1.warmup();
+           System.out.println("-----\n\n");
+           Thread.sleep(2000);
+
+           cp1.testEventualPut();
+           System.out.println("-----\n\n");
+           Thread.sleep(2000);
+
+           cp1.testMusicSequentialConsistentPut();
+           System.out.println("-----\n\n");
+           Thread.sleep(2000);
+
+           cp1.testPureConsistentPut();
+           System.out.println("-----\n\n");
+           Thread.sleep(2000);
+
+           cp1.testMusicEntryConsistentPut();
+           System.out.println("-----\n\n");
+
+           System.exit(0);
+    }
+}
\ No newline at end of file
index e7a1e25..863959e 100644 (file)
@@ -72,14 +72,14 @@ public class TestVotingApp
                 "INSERT INTO " + keyspaceName + "." + tableName + " (name, count) "
                             + "VALUES ('"+candidateName+"', 0);");
               
-              MusicCore.nonKeyRelatedPut(queryObject, "eventual");
+              MusicCore.eventualPut(queryObject);
        }
  
        
        private void updateVoteCount(String candidateName, int numVotes) throws MusicLockingException, MusicQueryException, MusicServiceException {
               PreparedQueryObject queryObject = new PreparedQueryObject();
               queryObject.appendQueryString(
-                "UPDATE " + keyspaceName + "." + tableName + " SET count="+numVotes + " where name='"+candidateName+"';");
+                "UPDATE " + keyspaceName + "." + tableName + " SET count=" +numVotes + " where name='" + candidateName + "';");
               MusicCore.atomicPut(keyspaceName, tableName, candidateName, queryObject, null);
        }
  
@@ -105,12 +105,14 @@ public class TestVotingApp
         tva.updateVoteCount("Flash",2);
         tva.updateVoteCount("Flash",3);
 
-           HashMap<String, Integer> voteCount = tva.readAllVotes();
+        HashMap<String, Integer> voteCount = tva.readAllVotes();
         System.out.println(voteCount);
+
                assert(voteCount.get("Popeye") == 5);
                assert(voteCount.get("Judy") == 9);
                assert(voteCount.get("Mickey") == 8);
                assert(voteCount.get("Flash") == 3);
+               System.exit(0);
     }
  
 }
\ No newline at end of file