package edu.brown.hstore.estimators.markov;
import org.voltdb.VoltProcedure;
import org.voltdb.benchmark.tpcc.procedures.slev;
import org.voltdb.catalog.Procedure;
import edu.brown.BaseTestCase;
import edu.brown.hstore.estimators.EstimatorUtil;
import edu.brown.hstore.estimators.markov.MarkovEstimate;
import edu.brown.markov.EstimationThresholds;
import edu.brown.markov.MarkovGraph;
import edu.brown.utils.ProjectType;
public class TestMarkovEstimate extends BaseTestCase {
private static final Class<? extends VoltProcedure> TARGET_PROCEDURE = slev.class;
private static final int NUM_PARTITIONS = 16;
private static final int BASE_PARTITION = 2;
private MarkovGraph markov;
private MarkovEstimate est;
private Procedure catalog_proc;
@Override
protected void setUp() throws Exception {
super.setUp(ProjectType.TPCC);
this.addPartitions(NUM_PARTITIONS);
this.catalog_proc = this.getProcedure(TARGET_PROCEDURE);
this.markov = new MarkovGraph(this.catalog_proc).initialize();
this.est = new MarkovEstimate(catalogContext);
assertFalse(this.est.isValid());
}
/**
* testProbabilities
*/
public void testProbabilities() throws Exception {
est.init(markov.getStartVertex(), EstimatorUtil.INITIAL_ESTIMATE_BATCH);
// Initialize
// This is based on an actual estimate generated from a benchmark run
for (int p = 0; p < NUM_PARTITIONS; p++) {
if (p == BASE_PARTITION) {
est.setWriteProbability(p, 0.08f);
est.setDoneProbability(p, 0.0f);
est.incrementTouchedCounter(p);
} else {
est.setWriteProbability(p, 0.0f);
est.setDoneProbability(p, 1.0f);
}
} // FOR
est.setConfidenceCoefficient(0.92f);
est.setAbortProbability(0.0f);
assert(this.est.isValid());
System.err.println(est);
EstimationThresholds thresholds = new EstimationThresholds(0.8f);
assertTrue(est.isSinglePartitioned(thresholds));
assertTrue(est.isReadOnlyAllPartitions(thresholds));
assertFalse(est.isAbortable(thresholds));
thresholds = new EstimationThresholds(1.0f);
assertTrue(est.isSinglePartitioned(thresholds));
assertFalse(est.isReadOnlyAllPartitions(thresholds));
assertFalse(est.isAbortable(thresholds));
}
}