package org.voltdb.regressionsuites.prefetchprocs; import org.voltdb.ProcInfo; import org.voltdb.SQLStmt; import org.voltdb.VoltProcedure; import org.voltdb.VoltTable; import edu.brown.interfaces.Prefetchable; import edu.brown.utils.ThreadUtil; @ProcInfo( partitionInfo = "TABLEA.A_ID: 0", singlePartition = false ) public class SquirrelsDistributed extends VoltProcedure { public final SQLStmt getLocal = new SQLStmt( "SELECT * FROM TABLEA WHERE A_ID = ?" ); @Prefetchable public final SQLStmt getRemote = new SQLStmt( "SELECT SUM(B_VALUE) FROM TABLEB WHERE B_A_ID = ?" ); public final SQLStmt updateLocal = new SQLStmt( "UPDATE TABLEA SET A_VALUE = ? WHERE A_ID = ?" ); public VoltTable[] run(long a_id, long sleep) { voltQueueSQL(getLocal, a_id); final VoltTable a_results[] = voltExecuteSQL(); assert(a_results.length == 1); System.err.printf("Sleeping for %.01f seconds\n", sleep / 1000d); ThreadUtil.sleep(sleep); System.err.println("Awake!"); voltQueueSQL(getRemote, a_id); final VoltTable b_results[] = voltExecuteSQL(); assert(b_results.length == 1); long sum = b_results[0].asScalarLong(); voltQueueSQL(updateLocal, sum, a_id); return (voltExecuteSQL(true)); } }