Package edu.brown.hstore

Source Code of edu.brown.hstore.TestTransactionInitializer

package edu.brown.hstore;

import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;

import org.junit.Before;
import org.voltdb.VoltProcedure;
import org.voltdb.benchmark.tpcc.procedures.neworder;
import org.voltdb.catalog.ProcParameter;
import org.voltdb.catalog.Procedure;
import org.voltdb.catalog.Site;
import org.voltdb.client.Client;
import org.voltdb.client.NullCallback;
import org.voltdb.types.ExpressionType;

import com.sun.tools.javac.code.Attribute.Array;

import edu.brown.BaseTestCase;
import edu.brown.catalog.CatalogUtil;
import edu.brown.hstore.conf.HStoreConf;
import edu.brown.hstore.estimators.Estimate;
import edu.brown.hstore.estimators.EstimatorState;
import edu.brown.hstore.estimators.TransactionEstimator;
import edu.brown.hstore.estimators.markov.MarkovEstimate;
import edu.brown.hstore.estimators.markov.MarkovEstimator;
import edu.brown.hstore.estimators.markov.MarkovEstimatorState;
import edu.brown.hstore.txns.LocalTransaction;
import edu.brown.mappings.ParameterMappingsSet;
import edu.brown.markov.containers.MarkovGraphsContainer;
import edu.brown.markov.containers.MarkovGraphsContainerUtil;
import edu.brown.utils.ClassUtil;
import edu.brown.utils.CollectionUtil;
import edu.brown.utils.EventObservable;
import edu.brown.utils.EventObserver;
import edu.brown.utils.FileUtil;
import edu.brown.utils.PartitionSet;
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.MultiPartitionTxnFilter;
import edu.brown.workload.filters.NoAbortFilter;
import edu.brown.workload.filters.ProcParameterArraySizeFilter;
import edu.brown.workload.filters.ProcedureLimitFilter;
import edu.brown.workload.filters.ProcedureNameFilter;

public class TestTransactionInitializer extends BaseTestCase {

    private static final int NUM_PARTITIONS = 2;
    private static final int WORKLOAD_XACT_LIMIT = 100;
    private static final int BASE_PARTITION = 0;
    private static final Class<? extends VoltProcedure> TARGET_PROCEDURE = neworder.class;
   
    private static File markovsFile;
    private static Workload workload;
   
    private HStoreSite hstore_site;
    private HStoreSite.Debug hstore_debug;
    private HStoreConf hstore_conf;
    private TransactionInitializer txnInitializer;
    private PartitionExecutor executors[];
    private TransactionTrace txnTrace;
    private Client client;
    private Procedure catalog_proc;
   
    @Before
    public void setUp() throws Exception {
        super.setUp(ProjectType.TPCC);
        initializeCatalog(1, 1, NUM_PARTITIONS);
       
        this.catalog_proc = this.getProcedure(TARGET_PROCEDURE);
        this.hstore_conf = HStoreConf.singleton();
        this.hstore_conf.site.txn_client_debug = true;
       
        if (isFirstSetup()) {
           
            // Workload Filter:
            //  (1) Only include TARGET_PROCEDURE traces
            //  (2) Only include traces with 10 orderline items
            //  (3) Only include traces that execute on the BASE_PARTITION
            //  (4) Limit the total number of traces to WORKLOAD_XACT_LIMIT
            List<ProcParameter> array_params = CatalogUtil.getArrayProcParameters(this.catalog_proc);
            Filter filter = new ProcedureNameFilter(false)
                  .include(TARGET_PROCEDURE.getSimpleName())
                  .attach(new NoAbortFilter())
                  .attach(new MultiPartitionTxnFilter(p_estimator, false))
                  .attach(new ProcParameterArraySizeFilter(array_params.get(0), 10, ExpressionType.COMPARE_EQUAL))
                  .attach(new ProcedureLimitFilter(WORKLOAD_XACT_LIMIT));
           
            File file = this.getWorkloadFile(ProjectType.TPCC);
            workload = new Workload(catalogContext.catalog).load(file, catalogContext.database, filter);
           
            // GENERATE MARKOV GRAPHS
            Map<Integer, MarkovGraphsContainer> markovs = MarkovGraphsContainerUtil.createMarkovGraphsContainers(
                                                                catalogContext,
                                                                workload,
                                                                p_estimator,
                                                                MarkovGraphsContainer.class);
            assertNotNull(markovs);
            markovsFile = FileUtil.getTempFile("markovs", true);
            MarkovGraphsContainerUtil.save(markovs, markovsFile);
        }
        assertTrue(markovsFile.exists());
       
       
    }
   
    private void initHStore() throws Exception {
        Site catalog_site = CollectionUtil.first(catalogContext.sites);
        this.hstore_site = createHStoreSite(catalog_site, hstore_conf);
        this.hstore_debug = this.hstore_site.getDebugContext();
        this.txnInitializer = this.hstore_site.getTransactionInitializer();
        this.executors = new PartitionExecutor[NUM_PARTITIONS];
        for (int partition = 0; partition < NUM_PARTITIONS; partition++) {
            this.executors[partition] = hstore_site.getPartitionExecutor(partition);
        } // FOR
       
        this.client = createClient();
    }
   
    @Override
    protected void tearDown() throws Exception {
        if (this.client != null) this.client.close();
        if (this.hstore_site != null) this.hstore_site.shutdown();
    }
   
    /**
     * testMarkovInitialization
     */
    public void testMarkovInitialization() throws Exception {
        this.hstore_conf.site.markov_enable = true;
        this.hstore_conf.site.markov_path = markovsFile.getAbsolutePath();
        this.hstore_conf.site.markov_dtxn_updates = true;
        this.hstore_conf.site.markov_dtxn_updates = true;
        this.initHStore();
       
        for (PartitionExecutor executor : this.executors) {
            TransactionEstimator estimator = executor.getTransactionEstimator();
            assertNotNull(estimator);
            assertEquals(MarkovEstimator.class, estimator.getClass());
        } // FOR
       
        Object params[] = CollectionUtil.first(workload).getParams();
        for (int i = 0; i < params.length; i++) {
            if (ClassUtil.isArray(params[i])) {
                Object inner[] = (Object[])params[i];
                int newInner[] = new int[inner.length];
                for (int ii = 0; ii < inner.length; ii++) {
                    newInner[ii] = ((Number)inner[ii]).intValue();
                }
                params[i] = newInner;
            }
        } // FOR
       
        this.client.callProcedure(new NullCallback(), this.catalog_proc.getName(), params);
       
        final AtomicReference<LocalTransaction> lastTxn = new AtomicReference<LocalTransaction>();
        final CountDownLatch latch = new CountDownLatch(1);
        EventObserver<LocalTransaction> newTxnObserver = new EventObserver<LocalTransaction>() {
            @Override
            public void update(EventObservable<LocalTransaction> o, LocalTransaction ts) {
                lastTxn.set(ts);
                latch.countDown();
            }
        };
        this.txnInitializer.getNewTxnObservable().addObserver(newTxnObserver);
       
        boolean result = latch.await(10000, TimeUnit.MILLISECONDS);
        assertTrue(result);
       
        LocalTransaction ts = lastTxn.get();
        assertNotNull(ts);
        assertFalse(ts.isPredictSinglePartition());
       
        EstimatorState estState = ts.getEstimatorState();
        assertNotNull(estState);
        assertEquals(MarkovEstimatorState.class, estState.getClass());
        assertTrue(estState.isInitialized());
       
        Estimate est = estState.getInitialEstimate();
        assertNotNull(est);
        assertEquals(MarkovEstimate.class, est.getClass());
       
       
    }
}
TOP

Related Classes of edu.brown.hstore.TestTransactionInitializer

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.