package edu.brown.markov.containers; import java.util.Collection; import org.apache.log4j.Logger; import org.voltdb.VoltType; import org.voltdb.catalog.Procedure; import edu.brown.markov.MarkovGraph; public class SEATSMarkovGraphsContainer extends MarkovGraphsContainer { private static final Logger LOG = Logger.getLogger(SEATSMarkovGraphsContainer.class); private static final boolean d = LOG.isDebugEnabled(); public SEATSMarkovGraphsContainer(Collection<Procedure> procedures) { super(procedures); } @Override public MarkovGraph getFromParams(Long txn_id, int base_partition, Object[] params, Procedure catalog_proc) { assert(this.hasher != null) : "Missing hasher!"; MarkovGraph ret = null; String proc_name = catalog_proc.getName(); int id = -1; // NewReservation if (proc_name.equals("NewReservation")) { if (d) LOG.debug(String.format("Selecting MarkovGraph using decision tree for %s txn #%d", proc_name, txn_id)); id = this.processNewReservation(txn_id, base_partition, params, catalog_proc); // DEFAULT } else { if (d) LOG.debug(String.format("Using default MarkovGraph for %s txn #%d", proc_name, txn_id)); id = base_partition; } ret = this.getOrCreate(id, catalog_proc, true); assert(ret != null); return (ret); } public int processDeleteReservation(long txn_id, int base_partition, Object[] params, Procedure catalog_proc) { int use_c_id_str = 0; int use_ff_c_id_str = 0; // C_ID == NULL long c_id = ((Long)params[1]).longValue(); if (c_id == VoltType.NULL_BIGINT) { if (params[2] != null) { use_c_id_str = 1; } else { use_ff_c_id_str = 1; } } return (use_c_id_str | use_ff_c_id_str<<8); } private int processNewReservation(long txn_id, int base_partition, Object[] params, Procedure catalog_proc) { // HASHVALUE(F_ID) int id = base_partition; // UPDATE CUSTOMER if (((Long)params[1]).longValue() == VoltType.NULL_BIGINT) { id |= 1<<31; } return (id); } }