Package edu.brown.oltpgenerator.env

Source Code of edu.brown.oltpgenerator.env.ProcEnv

package edu.brown.oltpgenerator.env;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

import org.voltdb.VoltType;
import org.voltdb.catalog.CatalogMap;
import org.voltdb.catalog.ProcParameter;
import org.voltdb.catalog.Procedure;

import edu.brown.catalog.CatalogUtil;
import edu.brown.markov.MarkovGraph;
import edu.brown.markov.MarkovUtil;
import edu.brown.oltpgenerator.Utils;
import edu.brown.oltpgenerator.env.RandomDistribution.RandomDistributionEnv;
import edu.brown.oltpgenerator.exception.TotalProbabilityExceeds100Exception;
import edu.brown.utils.ArgumentsParser;

public abstract class ProcEnv
{
    private static Comparator<Procedure>       m_compareProc      = new Comparator<Procedure>()
                                                                  {

                                                                      @Override
                                                                      public int compare(Procedure p1, Procedure p2)
                                                                      {
                                                                          return p1.getName().compareTo(p2.getName());
                                                                      }
                                                                  };

    private static Map<Procedure, MarkovGraph> s_mapProcToGraph;

    private static Map<String, Integer>        s_mapProbability   = new HashMap<String, Integer>();

    private static int                         s_nTotalProbablity = 0;

    public static void clear()
    {
        if (s_mapProcToGraph != null)
        {
            s_mapProcToGraph.clear();
        }
        s_mapProbability.clear();
        s_nTotalProbablity = 0;
    }

    public static String[] getProcNames(Procedure[] procs)
    {
        String[] ret = new String[procs.length];
        int i = 0;
        for (Procedure proc : procs)
        {
            ret[i++] = proc.getName();
        }
        return ret;
    }

    public static void loadTraceFile()
    {
        ArgumentsParser args = BenchmarkEnv.getExternalArgs();
        try
        {
            args.require(ArgumentsParser.PARAM_CATALOG, ArgumentsParser.PARAM_MARKOV);
            Map<Procedure, MarkovGraph> tmp = null;
//            MarkovUtil.load(args.catalog_db,;
//                                                              args.getParam(ArgumentsParser.PARAM_MARKOV),
//                                                              CatalogUtil.getAllPartitionIds(args.catalog_db)).get(0);

            s_mapProcToGraph = filterSysProcs(tmp);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public static void loadDefaultParaProperty()
    {
        for (Procedure proc : s_mapProcToGraph.keySet())
        {
            for (ProcParameter para : getAllParas(proc))
            {
                RandomDistributionEnv.put(para, RandomDistributionEnv.getDefaultProperty(para));
            }
        }
    }

    public static ProcParameter[] getAllParas(Procedure proc)
    {
        ProcParameter[] ret = new ProcParameter[proc.getParameters().size()];
        Iterator<ProcParameter> iter = proc.getParameters().iterator();
        int i = 0;
        while (iter.hasNext())
        {
            ret[i++] = iter.next();
        }
        return ret;
    }

    private static Map<Procedure, MarkovGraph> filterSysProcs(Map<Procedure, MarkovGraph> map)
    {
        Map<Procedure, MarkovGraph> ret = new TreeMap<Procedure, MarkovGraph>(m_compareProc);
        for (Procedure p : map.keySet())
        {
            if (!p.getSystemproc())
            {
                ret.put(p, map.get(p));
            }
        }

        return ret;
    }

    public static Integer getProbability(String sProcName)
    {
        return s_mapProbability.get(sProcName);
    }

    public static Procedure[] getAllProcedures()
    {
        if (s_mapProcToGraph == null)
        {
            return null;
        }

        Procedure[] ret = new Procedure[s_mapProcToGraph.size()];
        int i = 0;
        for (Procedure p : s_mapProcToGraph.keySet())
        {
            ret[i++] = p;
        }

        return ret;
    }

    public static void setProbability(String curProc, int value) throws TotalProbabilityExceeds100Exception
    {
        Integer nOldVal = s_mapProbability.get(curProc);
        int nDelta = (nOldVal == null) ? value : (value - nOldVal);
        int nNewTotal = s_nTotalProbablity + nDelta;
        if (nNewTotal > 100)
        {
            throw new TotalProbabilityExceeds100Exception(nOldVal, value);
        }
        s_mapProbability.put(curProc, value);
        s_nTotalProbablity = nNewTotal;
    }

    public static Procedure getProcedure(String sProcName)
    {
        for (Procedure proc : s_mapProcToGraph.keySet())
        {
            if (proc.getName().equals(sProcName))
            {
                return proc;
            }
        }

        throw new RuntimeException("Procedure " + sProcName + " does not exist");
    }

    public static VoltType[] getParaVoltTypes(Procedure proc)
    {
        CatalogMap<ProcParameter> procParams = proc.getParameters();
        VoltType[] ret = new VoltType[procParams.size()];
        Iterator<ProcParameter> iter = procParams.iterator();
        int i = 0;
        while (iter.hasNext())
        {
            ret[i++] = VoltType.get(iter.next().getType());
        }

        return ret;
    }

    public static String[] getParaVoltTypeNames(Procedure proc)
    {
        VoltType[] types = getParaVoltTypes(proc);
        String[] ret = new String[types.length];

        for (int i = 0; i < ret.length; i++)
        {
            ret[i] = types[i].toString();
            // VoltType.xxx
            int posDot = ret[i].indexOf(".");
            ret[i] = ret[i].substring(posDot + 1);
        }

        return ret;
    }

    public static String buildVmParaList(Procedure proc)
    {
        String ret = "";

        VoltType[] voltTypes = getParaVoltTypes(proc);
        String[] javaTypes = new String[voltTypes.length];

        for (int i = 0; i < voltTypes.length; i++)
        {
            javaTypes[i] = Utils.voltTypeToJavaType(voltTypes[i]);
        }

        if (javaTypes.length > 0)
        {
            int i = 0;
            for (; i < javaTypes.length - 1; i++)
            {
                ret = ret + (javaTypes[i] + " para" + i + ", ");
            }
            ret = ret + (javaTypes[i] + " para" + i);
        }

        return ret;
    }
}
TOP

Related Classes of edu.brown.oltpgenerator.env.ProcEnv

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.