Package edu.brown.oltpgenerator.AbstractBenchmark

Source Code of edu.brown.oltpgenerator.AbstractBenchmark.AbstractLoader

package edu.brown.oltpgenerator.AbstractBenchmark;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import edu.brown.api.BenchmarkComponent;
import edu.brown.oltpgenerator.RandUtil;
import edu.brown.oltpgenerator.env.TableEnv;
import edu.brown.oltpgenerator.velocity.CodeGenerator;
import edu.brown.utils.TableDataIterable;

import org.voltdb.VoltTable;
import org.voltdb.VoltTableRow;
import org.voltdb.VoltType;
import org.voltdb.catalog.*;
import org.voltdb.client.NoConnectionsException;

public abstract class AbstractLoader extends BenchmarkComponent
{
    protected AbstractLoader(String[] args)
    {
        super(args);
        // Loader class file and schema file are in the same directory
        TableEnv.setSrcSchemaPath(getSchemaFileName());
        TableEnv.readSchema();
    }

    /**
     * @return all AbstractTables to load, in topological order
     */
    protected abstract AbstractTable[] getAllTables();

    protected abstract String getSchemaFileName();

    @Override
    public String[] getTransactionDisplayNames()
    {
        return new String[] {};
    }

    @Override
    public void runLoop() throws NoConnectionsException
    {
        Map<String, VoltTable> memory = new HashMap<String, VoltTable>();
        for (AbstractTable at : getAllTables())
        {
            String sTblName = at.getName();
            VoltTable vt = TableEnv.initVoltTable(at.getName());

            String sLinkPath = at.getCsvLinkPath();
            if (sLinkPath != CodeGenerator.NO_CSV_PATH)
            {
                loadTableFromCsv(sTblName, sLinkPath, vt, memory);
            }
            else
            {
                loadTableByRandom(at, vt, memory);
            }

            System.err.println(sTblName + ": loading final " + vt.getRowCount() + " rows. ");
        }
    }

    private void loadTableFromCsv(String sTblName, String sLinkPath, VoltTable vt, Map<String, VoltTable> memory)
    {
        Table t = TableEnv.getTable(sTblName);
        try
        {
            Iterator<Object[]> iter = new TableDataIterable(t, new File(sLinkPath)).iterator();
            while (iter.hasNext())
            {
                vt.addRow(iter.next());
            }

            loadTable(sTblName, vt);
            memory.put(sTblName, vt);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    private void loadTableByRandom(AbstractTable at, VoltTable vt, Map<String, VoltTable> memory)
    {
        String sTblName = at.getName();
        Column[] cols = TableEnv.getAllColumns(TableEnv.getTable(sTblName));
        Object[] row = new Object[vt.getColumnCount()];

        for (int iRow = 0; iRow < at.getCardinality(); iRow++)
        {
            for (Column col : cols)
            {
                final int iCol = col.getIndex();
                Column referredCol = TableEnv.getReferredColumn(col);
                if (referredCol != null)
                {
                    VoltTable referredTbl = memory.get(referredCol.getParent().getName());
                    row[iCol] = pickRandomVal(referredTbl, referredCol);
                }
                else
                {
                    row[iCol] = at.getColumnValGenerators()[iCol].genRandVal();
                }
            }
            vt.addRow(row);
        }
        loadTable(sTblName, vt);
        memory.put(sTblName, vt);
    }

    private Object pickRandomVal(VoltTable table, Column col)
    {
        int size = table.getRowCount();
        int i_row = RandUtil.randLong(0, size - 1).intValue();
        VoltTableRow row = table.fetchRow(i_row);
        return row.get(col.getIndex(), VoltType.get((byte) col.getType()));
    }

    protected void loadTable(String tablename, VoltTable table)
    {
        try
        {
            getClientHandle().callProcedure("@LoadMultipartitionTable", tablename, table);
        }
        catch (Exception e)
        {
            e.printStackTrace();
            System.exit(1);
        }
    }
}
TOP

Related Classes of edu.brown.oltpgenerator.AbstractBenchmark.AbstractLoader

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.