package edu.brown.oltpgenerator.AbstractBenchmark; import org.voltdb.client.ClientResponse; import org.voltdb.client.ProcedureCallback; import edu.brown.api.BenchmarkComponent; import edu.brown.oltpgenerator.RandUtil; import edu.brown.oltpgenerator.AbstractBenchmark.RandomGenerator.AbstractRandomGenerator; public abstract class AbstractClient extends BenchmarkComponent { private AbstractTransactionTemplate[] m_xacts; private AbstractTransactionTemplate m_xactToInvoke; private ProcedureCallback m_callBack = new ProcedureCallback() { @Override public void clientCallback(ClientResponse clientResponse) { incrementTransactionCounter(clientResponse, m_xactToInvoke.getIndex()); } }; private int[] m_tblIndices; private static final int NO_TRASACTION = -1; public AbstractClient(String[] args) { super(args); m_xacts = getTransactions(); if (m_xacts == null || m_xacts.length == 0) { throw new RuntimeException("No transactions!"); } m_xactToInvoke = m_xacts[0]; initIndicesTable(m_xacts); } protected abstract AbstractTransactionTemplate[] getTransactions(); private void initIndicesTable(AbstractTransactionTemplate[] xacts) { m_tblIndices = new int[100]; int i = 0; for (; i < 100; i++) { m_tblIndices[i] = NO_TRASACTION; } i = 0; for (AbstractTransactionTemplate xact : xacts) { for (int cnt = 0, idx = xact.getIndex(); cnt < xact.getProbability(); cnt++) { m_tblIndices[i++] = idx; } } } @Override public String[] getTransactionDisplayNames() { String[] ret = new String[m_xacts.length]; for (int i = 0; i < ret.length; i++) { ret[i] = m_xacts[i].getClass().getSimpleName(); } return ret; } @Override public void runLoop() { try { while (true) { m_xactToInvoke = pickTransaction(); Object[] paras = AbstractRandomGenerator.genRandVals(m_xactToInvoke.getParaValGenerators()); getClientHandle().callProcedure(m_callBack, m_xactToInvoke.getClass().getSimpleName(), paras); getClientHandle().backpressureBarrier(); } } catch (Exception ex) { ex.printStackTrace(); } } private AbstractTransactionTemplate pickTransaction() { int idxXact; while (NO_TRASACTION == m_tblIndices[(idxXact = RandUtil.randInt(0, 99))]) { ; } return m_xacts[idxXact]; } }