Package org.voltdb.regressionsuites

Source Code of org.voltdb.regressionsuites.TestMapReduceTransactionSuite

package org.voltdb.regressionsuites;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

import org.junit.Test;
import org.voltdb.BackendTarget;
import org.voltdb.VoltTable;
import org.voltdb.benchmark.tpcc.TPCCConstants;
import org.voltdb.benchmark.tpcc.TPCCProjectBuilder;
import org.voltdb.benchmark.tpcc.procedures.ByteBuilder;
import org.voltdb.benchmark.tpcc.procedures.MRquery1;
import org.voltdb.benchmark.tpcc.procedures.MRquery6;
import org.voltdb.catalog.Database;
import org.voltdb.catalog.Table;
import org.voltdb.client.Client;
import org.voltdb.client.ClientResponse;
import org.voltdb.client.ProcCallException;

import edu.brown.catalog.CatalogUtil;
import edu.brown.hstore.Hstoreservice.Status;

public class TestMapReduceTransactionSuite extends RegressionSuite {
   
    private static final String PREFIX = "mr";
   
    /**
     * Supplemental classes needed by TPC-C procs.
     */
    public static final Class<?>[] SUPPLEMENTALS = {
        ByteBuilder.class, TPCCConstants.class
    };
   
   
    public TestMapReduceTransactionSuite(String name) {
        super(name);
    }
   
    @Test
    public void testMMRquery1 () throws IOException, ProcCallException {
        //int num_partitions = this.getServerConfig().getPartitionCount();
        Client client = this.getClient();
        final VoltTable vt = this.loadTable_ORDER_LINE(client);
       
        assertEquals(vt.getColumnCount(), 10);
       
        // Computer Query1 information
        /* MapReduce OLAP Experimental Queries
        addStmtProcedure("OLAPQuery1",
                         "SELECT ol_number, SUM(ol_quantity), SUM(ol_amount), " +
                         "       AVG(ol_quantity), AVG(ol_amount), COUNT(*)" +
                         "  FROM ORDER_LINE " +
                         " GROUP BY ol_number order by ol_number");*/
       
        // 0:ol_number,1:sum(ol_quantity),2:SUM(ol_amount),3:weight(ol_quantity),4:weight(ol_amount),5:sum
        List< List<Object>> rtLists = new ArrayList< List< Object >>();
        vt.resetRowPosition();
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        //Set <Integer> keyset = new HashSet <Integer>();
        Integer ct = 0;
        while(vt.advanceRow()) {
            Integer key = new Integer ((int) vt.getLong(3));
            if (!map.containsKey(key)) {
                map.put(new Integer ((int) vt.getLong(3)),ct);
                List <Object> cont = new ArrayList<Object>();
                rtLists.add(ct,cont);
               
                cont.add(0,key);
                //rtLists.get(ct).add(0, vt.getLong(3));
                if (cont.size() < 2) cont.add(1, vt.getLong(7));
                else cont.set(1, vt.getLong(7) + ((Long)cont.get(1)).longValue());
                if (cont.size() < 3) cont.add(2, vt.getDouble(8));
                else cont.set(2, vt.getDouble(8) + ((Double)cont.get(2)).doubleValue());
                if (cont.size() < 4) cont.add(3, 1);
                else cont.set(3, ((Integer)cont.get(3)).intValue() + 1);
               
                ct++;
            } else {
                int index = map.get(key);
                assertEquals(key, rtLists.get(index).get(0));
                //rtLists.get(ct).set(0, vt.getLong(3));
                rtLists.get(index).set(1, vt.getLong(7) + ((Long)rtLists.get(index).get(1)).longValue());
                rtLists.get(index).set(2, vt.getDouble(8) + ((Double)rtLists.get(index).get(2)).doubleValue());
                rtLists.get(index).set(3, ((Integer)rtLists.get(index).get(3) ).intValue()+ 1);
            }
        }
       
        // execute MapReduce Transaction to check the result
        ClientResponse cr = client.callProcedure("MRquery1");
        assertEquals(Status.OK, cr.getStatus());
        System.out.println("I am starting to compare the results...");
        int index = -1;
        // 0:ol_number,1:sum(ol_quantity),2:SUM(ol_amount),3:weight(ol_quantity),4:weight(ol_amount),5:sum
        for ( VoltTable v : cr.getResults()) {
            System.out.println("Jason,voltable:" + v);
            while (v.advanceRow()) {
                Integer key = new Integer ((int) v.getLong(0));
                assertTrue(map.containsKey(key));
                index = map.get(key);
                List <Object> cont = rtLists.get(index);
                System.out.println("Jason,result List:" + cont);
                long num =  ((Integer) cont.get(3)).longValue();
                assertEquals(key, cont.get(0));
                System.out.println("Compare (1):" + v.getLong(1) + " (2):"+ ((Long)cont.get(1)).longValue());
                assertEquals(((Long)cont.get(1)).longValue(), v.getLong(1));
                assertEquals(((Double)cont.get(2)).doubleValue(), v.getDouble(2), 0.1);
                assertEquals(v.getLong(3), ((Long)(v.getLong(1)/num)).longValue());
                assertEquals(v.getDouble(4), ((Double)(v.getDouble(2)/num)).doubleValue());
                assertEquals(v.getLong(5), num);
            }
            v.resetRowPosition();
        }
       
    }
   
   
    protected VoltTable loadTable_ORDER_LINE(Client client) throws IOException, ProcCallException {
        int num_partitions = this.getServerConfig().getPartitionCount();
        int num_tuples = num_partitions * 10;

        Database catalog_db = CatalogUtil.getDatabase(this.getCatalog());
        Table catalog_tbl = catalog_db.getTables().get("ORDER_LINE");
        assertNotNull(catalog_tbl);
        /*
        CREATE TABLE ORDER_LINE (
                OL_O_ID INTEGER DEFAULT '0' NOT NULL,
                OL_D_ID TINYINT DEFAULT '0' NOT NULL,
                OL_W_ID SMALLINT DEFAULT '0' NOT NULL,
                OL_NUMBER INTEGER DEFAULT '0' NOT NULL,
                OL_I_ID INTEGER DEFAULT NULL,
                OL_SUPPLY_W_ID SMALLINT DEFAULT NULL,
                OL_DELIVERY_D TIMESTAMP DEFAULT NULL,
                OL_QUANTITY INTEGER DEFAULT NULL,
                OL_AMOUNT FLOAT DEFAULT NULL,
                OL_DIST_INFO VARCHAR(32) DEFAULT NULL,
                PRIMARY KEY (OL_W_ID,OL_D_ID,OL_O_ID,OL_NUMBER),
                CONSTRAINT OL_FKEY_O FOREIGN KEY (OL_O_ID, OL_D_ID, OL_W_ID) REFERENCES ORDERS (O_ID, O_D_ID, O_W_ID),
                CONSTRAINT OL_FKEY_S FOREIGN KEY (OL_I_ID, OL_SUPPLY_W_ID) REFERENCES STOCK (S_I_ID, S_W_ID)
              );
              */
       
        Random rand = new Random(0);
        VoltTable vt = CatalogUtil.getVoltTable(catalog_tbl);
        int col_cnt = vt.getColumnCount();
        for (int i = 0; i < num_tuples; i++) {
            Object row[] = new Object[col_cnt];
            int col = 0;
            row[col++] = i;
            row[col++] = i;
            row[col++] = i;
            row[col++] = rand.nextInt(10); // OL_NUMBER
            col+=3; // disregard OL_I_ID,OL_SUPPLY_W_ID,OL_DELIVERY_D
            row[col++] = i * 2;
            row[col++] = 1.2 * i;
            row[col++] = "null message";
            assertEquals(col, 10);
            vt.addRow(row);
        } // FOR
       
        ClientResponse cr = client.callProcedure("@LoadMultipartitionTable", catalog_tbl.getName(), vt);
        assertEquals(Status.OK, cr.getStatus());
       
        return (vt);
    }
   
    public static junit.framework.Test suite() {
        VoltServerConfig config = null;
        // the suite made here will all be using the tests from this class
        MultiConfigSuiteBuilder builder = new MultiConfigSuiteBuilder(TestMapReduceTransactionSuite.class);

        // build up a project builder for the TPC-C app
        TPCCProjectBuilder project = new TPCCProjectBuilder();
        //project.setBackendTarget(BackendTarget.NATIVE_EE_IPC);
        project.addDefaultSchema();
        project.addDefaultProcedures();
        project.addDefaultPartitioning();
        project.addSupplementalClasses(SUPPLEMENTALS);
        project.addProcedure(MRquery1.class);
        project.addProcedure(MRquery6.class);
       
        boolean success = false;
       
        // CLUSTER CONFIG #1
        // One site with four partitions running in this JVM
        config = new LocalSingleProcessServer(PREFIX + "-twoPart.jar", 2, BackendTarget.NATIVE_EE_JNI);
        success = config.compile(project);
        assert(success);
        builder.addServerConfig(config);
       
        // CLUSTER CONFIG #2
        // Two sites, each with two partitions running in separate JVMs
//        config = new LocalCluster(PREFIX + "-twoSiteTwoPart.jar", 2, 2, 1, BackendTarget.NATIVE_EE_JNI);
//        config.setTestNameSuffix("mapBlocking_reduceBlocking");
//        config.setConfParameter("site.mr_map_blocking", true);
//        config.setConfParameter("site.mr_reduce_blocking", true);
//        success = config.compile(project);
//        assert(success);
//        builder.addServerConfig(config);
//       
//        // CLUSTER CONFIG #3
//        config = new LocalCluster(PREFIX + "-twoSiteFourPart_rB.jar", 2, 4, 1, BackendTarget.NATIVE_EE_JNI);
//        config.setTestNameSuffix("mapBlocking_reduceNonBlocking");
//        config.setConfParameter("site.mr_map_blocking", true);
//        config.setConfParameter("site.mr_reduce_blocking", false);
//        success = config.compile(project);
//        assert(success);
//        builder.addServerConfig(config);
//               
//        // CLUSTER CONFIG #4
//        config = new LocalCluster(PREFIX + "-twoSiteFourPart_mNB.jar",  2, 4, 1, BackendTarget.NATIVE_EE_JNI);
//        config.setTestNameSuffix("mapNonBlocking");
//        config.setConfParameter("site.mr_map_blocking", false);
//        config.setConfParameter("site.mr_reduce_blocking", false);
//        success = config.compile(project);
//        assert(success);
//        builder.addServerConfig(config);
       
        return builder;
    }
   
   
}
TOP

Related Classes of org.voltdb.regressionsuites.TestMapReduceTransactionSuite

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.