package edu.brown.hstore.txns; import org.voltdb.catalog.Procedure; import org.voltdb.messaging.FastSerializer; import com.google.protobuf.ByteString; import edu.brown.hstore.Hstoreservice.TransactionInitRequest; /** * Simple utility methods for transactions */ public abstract class TransactionUtil { protected static String debugStmtDep(int stmt_counter, int dep_id) { return String.format("{StmtCounter:%d, DependencyId:%d}", stmt_counter, dep_id); } protected static String debugPartDep(int partition, int dep_id) { return String.format("{Partition:%d, DependencyId:%d}", partition, dep_id); } protected static String debugStmtFrag(int stmtCounter, int fragment_id) { return String.format("{StmtCounter:%d, FragmentId:%d}", stmtCounter, fragment_id); } public static String formatTxnName(Procedure catalog_proc, Long txn_id) { if (catalog_proc != null) { return (catalog_proc.getName() + " #" + txn_id); } return ("#" + txn_id); } /** * Create a TransactionInitRequest builder for the given txn. * If paramsSerializer is not null, we will include the procedure ParameterSet * in the builder's message. * @param ts * @param paramsSerializer * @return */ public static TransactionInitRequest.Builder createTransactionInitBuilder(LocalTransaction ts, FastSerializer paramsSerializer) { TransactionInitRequest.Builder builder = TransactionInitRequest.newBuilder() .setTransactionId(ts.getTransactionId().longValue()) .setProcedureId(ts.getProcedure().getId()) .setBasePartition(ts.getBasePartition()) .addAllPartitions(ts.getPredictTouchedPartitions()); if (paramsSerializer != null) { FastSerializer fs = paramsSerializer; try { fs.clear(); ts.getProcedureParameters().writeExternal(fs); builder.setProcParams(ByteString.copyFrom(fs.getBBContainer().b)); } catch (Exception ex) { throw new RuntimeException("Failed to serialize ParameterSet for " + ts, ex); } } return (builder); } }