package org.voltdb.regressionsuites.specexecprocs;
import org.apache.log4j.Logger;
import org.voltdb.ProcInfo;
import org.voltdb.SQLStmt;
import org.voltdb.VoltProcedure;
import org.voltdb.VoltTable;
import edu.brown.benchmark.tm1.TM1Constants;
import edu.brown.utils.ThreadUtil;
@ProcInfo(
partitionParam = 0,
singlePartition = false
)
public class UpdateAll extends VoltProcedure {
private static final Logger LOG = Logger.getLogger(UpdateAll.class);
public final SQLStmt getLocal = new SQLStmt(
"SELECT S_ID, MSC_LOCATION " +
" FROM " + TM1Constants.TABLENAME_SUBSCRIBER +
" WHERE S_ID != ?"
);
public final SQLStmt broadcastUpdate = new SQLStmt(
"UPDATE " + TM1Constants.TABLENAME_SUBSCRIBER +
" SET MSC_LOCATION = ?"
);
public VoltTable[] run(int partition, long sleep) {
VoltTable results[] = null;
// First execute a remote query
voltQueueSQL(broadcastUpdate, 1234);
results = voltExecuteSQL();
assert(results.length == 1);
LOG.info(this.getTransactionState() + " - BROADCAST UPDATE:\n" + results[0]);
// Then sleep for a bit
LOG.info(String.format("%s - Sleeping for %.01f seconds", this.getTransactionState(), sleep / 1000d));
ThreadUtil.sleep(sleep);
LOG.info("Awake!");
voltQueueSQL(getLocal, partition);
results = voltExecuteSQL();
assert(results.length == 1);
LOG.info(this.getTransactionState() + " - LOCAL RESULTS:\n" + results[0]);
return (results);
}
}