Package edu.brown.markov

Source Code of edu.brown.markov.TestMarkovGraphProbabilities

package edu.brown.markov;

import java.io.File;

import org.voltdb.VoltProcedure;
import org.voltdb.catalog.Procedure;
import org.voltdb.catalog.Statement;

import edu.brown.BaseTestCase;
import edu.brown.benchmark.tm1.procedures.UpdateSubscriberData;
import edu.brown.mappings.ParameterMappingsSet;
import edu.brown.utils.CollectionUtil;
import edu.brown.utils.ProjectType;
import edu.brown.workload.TransactionTrace;
import edu.brown.workload.Workload;
import edu.brown.workload.filters.BasePartitionTxnFilter;
import edu.brown.workload.filters.Filter;
import edu.brown.workload.filters.ProcedureLimitFilter;
import edu.brown.workload.filters.ProcedureNameFilter;

public class TestMarkovGraphProbabilities extends BaseTestCase {

    private static final Class<? extends VoltProcedure> TARGET_PROCEDURE = UpdateSubscriberData.class;
    private static final int WORKLOAD_XACT_LIMIT = 10;
    private static final int BASE_PARTITION = 1;
    private static final int NUM_PARTITIONS = 4;

    private static Workload workload;
    private static ParameterMappingsSet correlations;
    private static MarkovGraph markov;
   
    private Procedure catalog_proc;
    private Statement catalog_stmt;
   
    @Override
    protected void setUp() throws Exception {
        super.setUp(ProjectType.TM1);
        this.addPartitions(NUM_PARTITIONS);

        this.catalog_proc = this.getProcedure(TARGET_PROCEDURE);
        this.catalog_stmt = CollectionUtil.first(this.catalog_proc.getStatements());
        assertNotNull(catalog_stmt);
       
        if (isFirstSetup()) {
           
            File file = this.getParameterMappingsFile(ProjectType.TM1);
            correlations = new ParameterMappingsSet();
            correlations.load(file, catalogContext.database);

            file = this.getWorkloadFile(ProjectType.TM1);
            workload = new Workload(catalogContext.catalog);

            // Check out this beauty:
            // (1) Filter by procedure name
            // (2) Filter on partitions that start on our BASE_PARTITION
            // (3) Filter to only include multi-partition txns
            // (4) Another limit to stop after allowing ### txns
            // Where is your god now???
            Filter filter = new ProcedureNameFilter(false)
                    .include(TARGET_PROCEDURE.getSimpleName())
                    .attach(new BasePartitionTxnFilter(p_estimator, BASE_PARTITION))
                    .attach(new ProcedureLimitFilter(WORKLOAD_XACT_LIMIT));
            workload.load(file, catalogContext.database, filter);
            assert(workload.getTransactionCount() > 0);
           
            markov = new MarkovGraph(catalog_proc).initialize();
            for (TransactionTrace txn_trace : workload.getTransactions()) {
                markov.processTransaction(txn_trace, p_estimator);
            } // FOR
            markov.calculateProbabilities(catalogContext.getAllPartitionIds());
        }
    }
   
    /**
     * testVertexProbabilities
     */
    public void testVertexProbabilities() {
        // There should only be one query vertex and it should be marked as single-partitioned
        MarkovVertex v = markov.getVertex(catalog_stmt);
        assertNotNull(v);
       
        System.err.println(v.debug());
       
//        assertEquals(1.0f, v.getSinglePartitionProbability());
        assert(v.getAbortProbability() > 0.0) : v.getAbortProbability();
       
        for (int p : catalogContext.getAllPartitionIds()) {
            if (p == BASE_PARTITION) {
//                assertEquals("ReadOnly("+p+")", 0.0f, v.getReadOnlyProbability(p), MarkovGraph.PROBABILITY_EPSILON);
                assertEquals("Write("+p+")", 1.0f, v.getWriteProbability(p), MarkovGraph.PROBABILITY_EPSILON);
                assertEquals("Done("+p+")", 0.0f, v.getDoneProbability(p), MarkovGraph.PROBABILITY_EPSILON);
            } else {
//                assertEquals("ReadOnly("+p+")", 1.0f, v.getReadOnlyProbability(p), MarkovGraph.PROBABILITY_EPSILON);
                assertEquals("Write("+p+")", 0.0f, v.getWriteProbability(p), MarkovGraph.PROBABILITY_EPSILON);
                assertEquals("Done("+p+")", 1.0f, v.getDoneProbability(p), MarkovGraph.PROBABILITY_EPSILON);
            }
        } // FOR
    }
   
}
TOP

Related Classes of edu.brown.markov.TestMarkovGraphProbabilities

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.