Package org.voltdb.regressionsuites

Source Code of org.voltdb.regressionsuites.TestPrefetchQuerySuite

package org.voltdb.regressionsuites;

import java.io.File;
import java.io.IOException;

import org.junit.Test;
import org.voltdb.BackendTarget;
import org.voltdb.CatalogContext;
import org.voltdb.VoltTable;
import org.voltdb.catalog.Procedure;
import org.voltdb.catalog.Statement;
import org.voltdb.client.Client;
import org.voltdb.client.ClientResponse;

import edu.brown.benchmark.smallbank.SmallBankProjectBuilder;
import edu.brown.benchmark.smallbank.procedures.SendPayment;
import edu.brown.hstore.Hstoreservice.Status;
import edu.brown.mappings.ParametersUtil;
import edu.brown.utils.ProjectType;

/**
* Regression tests for the query prefetching optimization
* @author pavlo
*/
public class TestPrefetchQuerySuite extends RegressionSuite {
   
    private static final String PREFIX = "prefetch";

    /**
     * testPrefetch
     * @throws Exception
     */
    @Test
    public void testPrefetch() throws Exception {
        CatalogContext catalogContext = this.getCatalogContext();
        Client client = this.getClient();
        TestSmallBankSuite.initializeSmallBankDatabase(catalogContext, client);
       
        // Check to make sure that we have some prefetch queries
        Procedure catalog_proc = catalogContext.procedures.getIgnoreCase(SendPayment.class.getSimpleName());
        assertNotNull(catalog_proc);
        int prefetch_ctr = 0;
        for (Statement catalog_stmt : catalog_proc.getStatements()) {
            assertNotNull(catalog_stmt);
            if (catalog_stmt.getPrefetchable()) prefetch_ctr++;
        } // FOR
        assertTrue(prefetch_ctr > 0);
       
        long acctIds[] = { 1l, 2l };
        double balances[] = { 100d, 0d };
        for (int i = 0; i < acctIds.length; i++) {
            TestSmallBankSuite.updateBalance(client, acctIds[i], balances[i]);
//            TestSmallBankSuite.checkBalance(client, acctIds[i], balances[i]);
        } // FOR
       
        // Run the SendPayment txn to send all the money from the first
        // account to the second account.
        ClientResponse cresponse = client.callProcedure(catalog_proc.getName(),
                                                        acctIds[0], acctIds[1], balances[0]);
        assertEquals(Status.OK, cresponse.getStatus());
        assertFalse(cresponse.toString(), cresponse.isSinglePartition());
        assertTrue(cresponse.toString(), cresponse.getDebug().hadPrefetchedQueries());
       
        VoltTable results[] = cresponse.getResults();
        assertEquals(2, results.length);
        for (int i = 0; i < results.length; i++) {
            assertEquals(1l, results[i].asScalarLong());
        } // FOR
       
        // Make sure the account balances have switched
        for (int i = 0; i < acctIds.length; i++) {
            TestSmallBankSuite.checkBalance(client, acctIds[i], balances[i == 0 ? 1 : 0]);
        } // FOR
    }
   
    /**
     * JUnit / RegressionSuite Boilerplate Constructor
     * @param name The name of this test suite
     */
    public TestPrefetchQuerySuite(String name) {
        super(name);
    }
    static public junit.framework.Test suite() throws IOException {
        File mappings = ParametersUtil.getParameterMappingsFile(ProjectType.SMALLBANK);
        File markovs = new File("files/markovs/smallbank-2p.markov.gz"); // HACK
       
        MultiConfigSuiteBuilder builder = new MultiConfigSuiteBuilder(TestPrefetchQuerySuite.class);
        builder.setGlobalConfParameter("site.exec_prefetch_queries", true);
        builder.setGlobalConfParameter("site.exec_force_singlepartitioned", false);
        builder.setGlobalConfParameter("site.exec_voltdb_procinfo", false);
        builder.setGlobalConfParameter("site.markov_enable", true);
        builder.setGlobalConfParameter("site.markov_path", markovs.getAbsolutePath());
        builder.setGlobalConfParameter("site.markov_path_caching", true);
        builder.setGlobalConfParameter("site.txn_client_debug", true);
        builder.setGlobalConfParameter("site.network_startup_wait", 60000);
        builder.setGlobalConfParameter("client.txn_hints", false);
       
        SmallBankProjectBuilder project = new SmallBankProjectBuilder();
        project.addDefaultSchema();
        project.addDefaultProcedures();
        project.addDefaultPartitioning();
        project.addParameterMappings(mappings);
       
        VoltServerConfig config;
        boolean success;
       
        /////////////////////////////////////////////////////////////
        // CONFIG #2: 1 Local Site with 2 Partitions running on JNI backend
        /////////////////////////////////////////////////////////////
        config = new LocalSingleProcessServer(PREFIX + "-2part.jar", 2, BackendTarget.NATIVE_EE_JNI);
        success = config.compile(project);
        assert(success);
        builder.addServerConfig(config);
       
        ////////////////////////////////////////////////////////////
        // CONFIG #3: cluster of 2 nodes running 1 site each, one replica
        ////////////////////////////////////////////////////////////
        config = new LocalCluster(PREFIX + "-cluster.jar", 2, 1, 1, BackendTarget.NATIVE_EE_JNI);
        success = config.compile(project);
        assert(success);
        builder.addServerConfig(config);
       
        return builder;
    }
   
}
TOP

Related Classes of org.voltdb.regressionsuites.TestPrefetchQuerySuite

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.