aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/onap/music/testruns/ComparisonPoints1.java273
-rw-r--r--src/main/java/org/onap/music/testruns/TestVotingApp.java118
2 files changed, 391 insertions, 0 deletions
diff --git a/src/main/java/org/onap/music/testruns/ComparisonPoints1.java b/src/main/java/org/onap/music/testruns/ComparisonPoints1.java
new file mode 100644
index 00000000..fb510403
--- /dev/null
+++ b/src/main/java/org/onap/music/testruns/ComparisonPoints1.java
@@ -0,0 +1,273 @@
+package org.onap.music.testruns;
+
+import com.datastax.driver.core.ResultSet;
+import org.apache.commons.lang3.tuple.Pair;
+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 org.onap.music.util.SamplerHistogramTimeMeasure;
+import org.onap.music.util.TimeMeasure;
+import org.onap.music.util.TimeMeasureInstance;
+
+import java.text.DecimalFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+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 performWarmup(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 {
+ TimeMeasureInstance.instance().enter("warmup");
+ String tableName = "warmup";
+ System.out.println("Warming Up");
+ createTable(tableName);
+ Thread.sleep(1000);
+
+ for (int i = 0; i < BENCH_TIMES; i++) {
+ String name = "Joe" + i;
+ int age = i + 12300;
+ performWarmup(tableName, name, age);
+// check(tableName, name, age);
+ }
+
+ System.out.println("done");
+ TimeMeasureInstance.instance().exit();
+ }
+
+ private void performMusicEntryConsistentPut(String tableName, String name, int age) throws MusicServiceException, MusicLockingException, MusicQueryException {
+ TimeMeasureInstance.instance().enter("performMusicEntryConsistentPut");
+ 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);
+ TimeMeasureInstance.instance().exit();
+ }
+
+ private void benchmarkMusicEntryConsistentPut() throws Exception {
+ TimeMeasureInstance.instance().enter("benchmarkMusicEntryConsistentPut");
+ String tableName = "mentry2";
+ System.out.println("Benchmark music entry consistent put");
+ createTable(tableName);
+ Thread.sleep(1000);
+ System.out.println("begin");
+
+ for (int i = 0; i < BENCH_TIMES; i++) {
+ String name = "Joe" + i;
+ int age = i + 10;
+ performMusicEntryConsistentPut(tableName, name, age);
+// check(tableName, name, age);
+ }
+
+ System.out.println("done");
+ TimeMeasureInstance.instance().exit();
+ }
+
+ private void performMusicSequentialConsistentPut(String tableName, String name, int age) throws MusicServiceException, MusicLockingException, MusicQueryException {
+ TimeMeasureInstance.instance().enter("performMusicSequentialConsistentPut");
+ 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);
+ TimeMeasureInstance.instance().exit();
+ }
+
+ private void benchmarkMusicSequentialConsistentPut() throws Exception {
+ TimeMeasureInstance.instance().enter("benchmarkMusicSequentialConsistentPut");
+ String tableName = "mseq";
+ System.out.println("Benchmark music sequential consistent put");
+ createTable(tableName);
+ Thread.sleep(1000);
+ System.out.println("begin");
+
+ for (int i = 0; i < BENCH_TIMES; i++) {
+ String name = "Joe" + i;
+ int age = i + 10;
+ performMusicSequentialConsistentPut(tableName, name, age);
+// check(tableName, name, age);
+ }
+
+ System.out.println("done");
+ TimeMeasureInstance.instance().exit();
+ }
+
+ private void performEventualPut(String tableName, String name, int age) throws MusicServiceException, MusicLockingException, MusicQueryException {
+ TimeMeasureInstance.instance().enter("performEventualPut");
+ PreparedQueryObject query = new PreparedQueryObject();
+ query.appendQueryString(
+ "INSERT INTO " + keyspaceName + "." + tableName + " (name, age) "
+ + "VALUES (?, ?);");
+ query.addValue(name);
+ query.addValue(age);
+
+ MusicCore.eventualPut(query);
+ TimeMeasureInstance.instance().exit();
+ }
+
+ private void benchmarkEventualPut() throws Exception {
+ TimeMeasureInstance.instance().enter("benchmarkEventualPut");
+ String tableName = "eventual";
+ System.out.println("Benchmark eventual put");
+ createTable(tableName);
+ Thread.sleep(1000);
+ System.out.println("begin");
+
+ for (int i = 0; i < BENCH_TIMES; i++) {
+ String name = "Joe" + i;
+ int age = i + 10;
+ performEventualPut(tableName, name, age);
+// check(tableName, name, age);
+ }
+ System.out.println("done");
+ TimeMeasureInstance.instance().exit();
+ }
+
+ private void performPureConsistentPut(String tableName, String name, int age) throws MusicServiceException, MusicLockingException, MusicQueryException {
+ TimeMeasureInstance.instance().enter("performPureConsistentPut");
+ 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);
+ TimeMeasureInstance.instance().exit();
+ }
+
+ private void benchmarkPureConsistentPut() throws Exception {
+ TimeMeasureInstance.instance().enter("benchmarkPureConsistentPut");
+ String tableName = "pure";
+ System.out.println("Benchmark pure consistent put");
+ createTable(tableName);
+ Thread.sleep(1000);
+ System.out.println("begin");
+
+ for (int i = 0; i < BENCH_TIMES; i++) {
+ String name = "Joe" + i;
+ int age = i + 10;
+ performPureConsistentPut(tableName, name, age);
+// check(tableName, name, age);
+ }
+
+ System.out.println("done");
+ TimeMeasureInstance.instance().exit();
+ }
+
+ 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 {
+ TimeMeasureInstance.setInstance(new SamplerHistogramTimeMeasure());
+ ComparisonPoints1 cp1 = new ComparisonPoints1();
+ cp1.initialize();
+ Thread.sleep(2000);
+
+ cp1.warmup();
+ System.out.println("-----\n\n");
+ Thread.sleep(1000);
+
+ cp1.benchmarkEventualPut();
+ System.out.println("-----\n\n");
+ Thread.sleep(1000);
+
+ cp1.benchmarkMusicSequentialConsistentPut();
+ System.out.println("-----\n\n");
+ Thread.sleep(1000);
+
+ cp1.benchmarkPureConsistentPut();
+ System.out.println("-----\n\n");
+ Thread.sleep(1000);
+
+ cp1.benchmarkMusicEntryConsistentPut();
+ System.out.println("-----\n\n");
+
+ TimeMeasure tm = TimeMeasureInstance.instance();
+
+ Map<String, ArrayList<Double>> e = tm.percentiles();
+ Map<String, Pair<Double, Double>> m = tm.stats();
+ DecimalFormat df = new DecimalFormat("000.000000");
+ e.forEach((k,v) -> System.out.println("" + k + "\t\t: " + Arrays.toString(v.stream().map(w -> "" + df.format(w)).toArray())));
+ m.forEach((k,v) -> System.out.println("" + k + "\t\t: " + df.format(v.getLeft()) + " (" + df.format(v.getRight()) + ")"));
+
+ System.exit(0);
+ }
+
+} \ No newline at end of file
diff --git a/src/main/java/org/onap/music/testruns/TestVotingApp.java b/src/main/java/org/onap/music/testruns/TestVotingApp.java
new file mode 100644
index 00000000..10830a14
--- /dev/null
+++ b/src/main/java/org/onap/music/testruns/TestVotingApp.java
@@ -0,0 +1,118 @@
+package org.onap.music.testruns;
+
+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 TestVotingApp
+{
+ String keyspaceName;
+ String tableName;
+
+ public TestVotingApp() throws MusicServiceException {
+ keyspaceName = "VotingAppForMusic"+System.currentTimeMillis();
+ tableName = "votecount";
+ }
+
+ private void initialize() throws MusicServiceException {
+ 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) {
+ throw(e);
+ }
+ }
+
+ private void createVotingTable() throws MusicServiceException {
+ PreparedQueryObject queryObject = new PreparedQueryObject();
+ queryObject.appendQueryString(
+ "CREATE TABLE " + keyspaceName + "." + tableName + " (name text PRIMARY KEY, count int);");
+
+ try {
+ MusicCore.createTable(keyspaceName, tableName, queryObject, "eventual");
+ } catch (MusicServiceException e) {
+ 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.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 + "';");
+ MusicCore.atomicPut(keyspaceName, tableName, candidateName, queryObject, null);
+ }
+
+ private HashMap<String, Integer> readAllVotes() throws MusicServiceException {
+ PreparedQueryObject queryObject = new PreparedQueryObject();
+ queryObject.appendQueryString("SELECT * FROM " + keyspaceName + "." + tableName);
+ ResultSet rs = MusicCore.get(queryObject);
+ HashMap<String, Integer> voteCount = new HashMap<String, Integer>();
+ for(Row candidate : rs.all()) {
+ voteCount.put(candidate.getString("name"), candidate.getInt("count"));
+ }
+ return voteCount;
+ }
+
+ public static void main( String[] args ) throws Exception {
+ TestVotingApp tva = new TestVotingApp();
+ tva.initialize();
+
+ tva.updateVoteCount("Popeye",5);
+ tva.updateVoteCount("Judy",9);
+ tva.updateVoteCount("Mickey",8);
+ tva.updateVoteCount("Flash",1);
+ tva.updateVoteCount("Flash",2);
+ tva.updateVoteCount("Flash",3);
+
+ 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