Skip to content
Open
93 changes: 63 additions & 30 deletions src/com/oltpbenchmark/benchmarks/tpcc/JsonMetricsHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.oltpbenchmark.benchmarks.tpcc.pojo.TpccRunResults;
import com.oltpbenchmark.util.LatencyMetricsUtil;
import com.oltpbenchmark.util.FileUtil;
import com.oltpbenchmark.util.LatencyMetricsUtil;
import org.apache.log4j.Logger;

import java.io.File;
Expand Down Expand Up @@ -42,11 +42,11 @@ public void setTestResults(String tpmc, String efficiency, String throughput) {
}

public void addLatency(String op, List<Integer> latencyList, List<Integer> connLatencyList) {
tpccRunResults.Latencies.add(getLatencyValueList(op, latencyList, connLatencyList));
tpccRunResults.Latencies.put(op,getLatencyValueList(null, latencyList, connLatencyList));
}

public void addFailureLatency(String op, List<Integer> latencyList, List<Integer> connLatencyList) {
tpccRunResults.FailureLatencies.add(getLatencyValueList(op, latencyList, connLatencyList));
tpccRunResults.FailureLatencies.put(op,getLatencyValueList(null, latencyList, connLatencyList));
}

public void addWorkerTaskLatency(String op, String task, List<Integer> latencyList) {
Expand All @@ -56,20 +56,20 @@ public void addWorkerTaskLatency(String op, String task, List<Integer> latencyLi
tpccRunResults.WorkerTaskLatency.get(op).add(getLatencyValueList(task, latencyList, null));
}

public void addRetry(String op, int count,int[] retryOpList) {
public void addRetry(String op, int count, int[] retryOpList) {
TpccRunResults.RetryAttemptsData retryObj = tpccRunResults.new RetryAttemptsData();
retryObj.count = count;
retryObj.retriesFailureCount = Arrays.asList(retryOpList);
tpccRunResults.RetryAttempts.put(op,retryObj);
tpccRunResults.RetryAttempts.put(op, retryObj);
}

private TpccRunResults.LatencyList getLatencyValueList(String op, List<Integer> latencyList,
private TpccRunResults.LatencyList getLatencyValueList(String task, List<Integer> latencyList,
List<Integer> connAcqLatencyList) {
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setGroupingUsed(false);
TpccRunResults.LatencyList valueList = tpccRunResults.new LatencyList();
valueList.Transaction = op;
valueList.WorkerTask = task;
valueList.Count = latencyList.size();
valueList.avgLatency = Double.parseDouble(df.format(LatencyMetricsUtil.getAverageLatency(latencyList)));
valueList.P99Latency = Double.parseDouble(df.format(LatencyMetricsUtil.getP99Latency(latencyList)));
Expand All @@ -79,6 +79,7 @@ private TpccRunResults.LatencyList getLatencyValueList(String op, List<Integer>
return valueList;
}


/* Writes the Json object to a JSON file */
public void writeMetricsToJSONFile() {
String outputDirectory = "results/json";
Expand Down Expand Up @@ -136,6 +137,7 @@ public static void mergeJsonResults(String dirPath) {
int numNewOrder = 0;

int filesMergedIdx = 0;
boolean firstFile = true;
for (TpccRunResults tpccResult : listTpccRunResults) {

if(filesMergedIdx == 0) {
Expand All @@ -152,21 +154,30 @@ public static void mergeJsonResults(String dirPath) {
tpccResult.Results.throughput, filesMergedIdx);
}


List<TpccRunResults.LatencyList> latList = tpccResult.Latencies;
for (int i = 0; i < latList.size() ; i++) {
TpccRunResults.LatencyList opLatency = latList.get(i);
Map<String, TpccRunResults.LatencyList> latList = tpccResult.Latencies;
for (Map.Entry<String, TpccRunResults.LatencyList> entry : latList.entrySet()) {
String op = entry.getKey();
TpccRunResults.LatencyList opLatency = entry.getValue();
TpccRunResults.LatencyList latency;
if(opLatency.Transaction.equalsIgnoreCase("NewOrder"))
if (op.equalsIgnoreCase("NewOrder"))
numNewOrder += opLatency.Count;
if(filesMergedIdx == 0) {
latency = opLatency;
latency.minLatency = latency.maxLatency = latency.avgLatency;
latency.maxConnAcqLatency = latency.minConnAcqLatency = latency.connectionAcqLatency;
mergedTpccResults.Latencies.add(latency);

if (!mergedTpccResults.Latencies.containsKey(op)) {
latency = mergedTpccResults.new LatencyList();
latency.avgLatency = opLatency.avgLatency;
latency.minLatency = opLatency.avgLatency;
latency.maxLatency = opLatency.avgLatency;
latency.P99Latency = opLatency.P99Latency;
latency.connectionAcqLatency = opLatency.connectionAcqLatency;
latency.minConnAcqLatency = opLatency.connectionAcqLatency;
latency.maxConnAcqLatency = opLatency.connectionAcqLatency;
mergedTpccResults.Latencies.put(op,latency);
} else {
latency = mergedTpccResults.Latencies.get(i);
latency.Count += opLatency.Count;
latency = mergedTpccResults.Latencies.get(op);
latency.avgLatency = computeAverage(latency.avgLatency,
opLatency.avgLatency, filesMergedIdx);
latency.connectionAcqLatency = computeAverage(latency.connectionAcqLatency,
opLatency.connectionAcqLatency, filesMergedIdx);
latency.minLatency = latency.minLatency > opLatency.avgLatency ?
opLatency.avgLatency : latency.minLatency;
latency.maxLatency = latency.maxLatency < opLatency.avgLatency ?
Expand All @@ -181,20 +192,26 @@ public static void mergeJsonResults(String dirPath) {
latency.connectionAcqLatency = computeAverage(latency.connectionAcqLatency,
opLatency.connectionAcqLatency, filesMergedIdx);
}
mergedTpccResults.Latencies.set(i, latency);
latency.Count += opLatency.Count;
mergedTpccResults.Latencies.put(op, latency);

}

List<TpccRunResults.LatencyList> failureLatList = tpccResult.FailureLatencies;
for (int i = 0; i < failureLatList.size() ; i++) {
TpccRunResults.LatencyList opLatency = failureLatList.get(i);
Map<String, TpccRunResults.LatencyList> failureLatList = tpccResult.FailureLatencies;
for (Map.Entry<String, TpccRunResults.LatencyList> entry : failureLatList.entrySet()) {
String op = entry.getKey();
TpccRunResults.LatencyList opLatency = entry.getValue();
TpccRunResults.LatencyList failureLat;
if (filesMergedIdx == 0) {
failureLat = opLatency;
failureLat.minConnAcqLatency = failureLat.maxConnAcqLatency = opLatency.connectionAcqLatency;
failureLat.minLatency = failureLat.maxLatency = opLatency.avgLatency;
mergedTpccResults.FailureLatencies.add(failureLat);
if (mergedTpccResults.FailureLatencies.containsKey(op)) {
failureLat = mergedTpccResults.new LatencyList();
failureLat.minLatency = opLatency.avgLatency;
failureLat.maxLatency = opLatency.avgLatency;
failureLat.P99Latency = opLatency.P99Latency;
failureLat.minConnAcqLatency = opLatency.connectionAcqLatency;
failureLat.maxConnAcqLatency = opLatency.connectionAcqLatency;
mergedTpccResults.FailureLatencies.put(op, failureLat);
} else {
failureLat = mergedTpccResults.FailureLatencies.get(i);
failureLat = mergedTpccResults.FailureLatencies.get(op);
failureLat.minLatency = failureLat.minLatency > opLatency.avgLatency ?
opLatency.avgLatency : failureLat.minLatency;
failureLat.maxLatency = failureLat.maxLatency < opLatency.avgLatency ?
Expand All @@ -210,7 +227,17 @@ public static void mergeJsonResults(String dirPath) {
failureLat.connectionAcqLatency = computeAverage(failureLat.connectionAcqLatency,
opLatency.connectionAcqLatency, filesMergedIdx);
}
mergedTpccResults.FailureLatencies.set(i, failureLat);

failureLat.Count += opLatency.Count;
if (failureLat.avgLatency != null) {
failureLat.avgLatency = computeAverage(failureLat.avgLatency,
opLatency.avgLatency, filesMergedIdx);
} else failureLat.avgLatency = opLatency.avgLatency;
if (failureLat.connectionAcqLatency != null) {
failureLat.connectionAcqLatency = computeAverage(failureLat.connectionAcqLatency,
opLatency.connectionAcqLatency, filesMergedIdx);
} else failureLat.connectionAcqLatency = opLatency.connectionAcqLatency;
mergedTpccResults.FailureLatencies.put(op, failureLat);
}

Map<String, TpccRunResults.RetryAttemptsData> retryAttempts = tpccResult.RetryAttempts;
Expand Down Expand Up @@ -242,8 +269,14 @@ public static void mergeJsonResults(String dirPath) {
double tpmc = 1.0 * numNewOrder * 60 / mergedTpccResults.TestConfiguration.runTimeInSecs;
mergedTpccResults.Results.efficiency = 1.0 * tpmc * 100 / mergedTpccResults.TestConfiguration.totalWarehouses / 12.86;
mergedTpccResults.Results.tpmc = tpmc;
if (mergedTpccResults.RetryAttempts.size() == 0) mergedTpccResults.RetryAttempts = null;
if (mergedTpccResults.WorkerTaskLatency.size() == 0)
mergedTpccResults.WorkerTaskLatency = null;

jsonHelper.writeMetricsToJSONFile();
}

public static void main(String[] args) {
mergeJsonResults(args[0]);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.oltpbenchmark.benchmarks.tpcc.pojo;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -11,19 +10,19 @@ public class TpccRunResults {

public RunResults Results = new RunResults();

public List<LatencyList> Latencies = new ArrayList<>();
public Map<String, LatencyList> Latencies = new LinkedHashMap<>();

public List<LatencyList> FailureLatencies = new ArrayList<>();
public Map<String, LatencyList> FailureLatencies = new LinkedHashMap<>();

public Map<String, List<LatencyList>> WorkerTaskLatency = new LinkedHashMap<>();

public Map<String, RetryAttemptsData> RetryAttempts = new LinkedHashMap<>();

public class LatencyList {
public String Transaction;
public String WorkerTask;
public int Count;
public Double minLatency;
public Double avgLatency;
public Double minLatency;
public Double maxLatency;
public Double P99Latency;
public Double connectionAcqLatency;
Expand Down