package edu.brown.workload;
import java.util.HashSet;
import java.util.Set;
import org.apache.log4j.Logger;
import org.voltdb.catalog.Database;
import edu.brown.utils.ArgumentsParser;
public abstract class VerifyWorkload {
private static final Logger LOG = Logger.getLogger(VerifyWorkload.class);
public static boolean verify(Database catalog_db, Workload workload) throws Exception {
Set<Long> txn_ids = new HashSet<Long>();
long ctr = 0;
for (AbstractTraceElement<?> element : workload) {
// TransactionTrace
if (element instanceof TransactionTrace) {
TransactionTrace txn_trace = (TransactionTrace)element;
long txn_id = txn_trace.getTransactionId();
if (txn_ids.contains(txn_id)) {
LOG.fatal("Duplicate Txn Id: " + txn_id);
return (false);
}
txn_ids.add(txn_id);
}
ctr++;
if (ctr > 1 && ctr % 1000 == 0) LOG.debug("Examined " + ctr + " trace elements...");
} // WHILE
if (txn_ids.isEmpty()) {
LOG.warn("No txns were found in workload?");
return (false);
} else if (txn_ids.size() != workload.getTransactionCount()) {
LOG.warn("Expected to get " + workload.getTransactionCount() + " txns, but we saw " + txn_ids.size());
return (false);
}
return (true);
}
/**
* @param args
*/
public static void main(String[] vargs) throws Exception {
ArgumentsParser args = ArgumentsParser.load(vargs);
args.require(
ArgumentsParser.PARAM_CATALOG,
ArgumentsParser.PARAM_WORKLOAD
);
assert(VerifyWorkload.verify(args.catalog_db, args.workload));
LOG.info("The workload " + args.workload + " is valid!");
}
}