package edu.brown.designer.partitioners; import java.io.File; import org.voltdb.CatalogContext; import org.voltdb.catalog.Database; import edu.brown.BaseTestCase; import edu.brown.designer.Designer; import edu.brown.designer.DesignerHints; import edu.brown.designer.DesignerInfo; import edu.brown.mappings.ParameterMappingsSet; import edu.brown.statistics.WorkloadStatistics; import edu.brown.utils.ProjectType; import edu.brown.workload.Workload; import edu.brown.workload.filters.Filter; import edu.brown.workload.filters.ProcedureLimitFilter; public abstract class BasePartitionerTestCase extends BaseTestCase { private static final long WORKLOAD_XACT_LIMIT = 1000; private static final int NUM_THREADS = 1; protected static final int NUM_PARTITIONS = 10; protected static final int NUM_INTERVALS = 10; // Reading the workload takes a long time, so we only want to do it once protected static Workload workload; protected static WorkloadStatistics stats; protected static ParameterMappingsSet mappings; protected static File mappings_file; protected Designer designer; protected DesignerInfo info; protected DesignerHints hints; @Override protected void setUp(ProjectType type, boolean fkeys) throws Exception { super.setUp(type, fkeys); this.addPartitions(NUM_PARTITIONS); // Super hack! Walk back the directories and find out workload directory if (workload == null) { File workload_file = this.getWorkloadFile(type); assertNotNull(workload_file); assert(workload_file.exists()); workload = new Workload(catalog); Filter filter = new ProcedureLimitFilter(WORKLOAD_XACT_LIMIT); ((Workload) workload).load(workload_file, catalog_db, filter); File stats_file = this.getStatsFile(type); assertNotNull(stats_file); assert(stats_file.exists()); stats = new WorkloadStatistics(catalog_db); try { stats.load(stats_file, catalog_db); } catch (AssertionError ex) { System.err.println("Failed to load " + stats_file.getAbsolutePath()); throw ex; } this.applyParameterMappings(type); mappings_file = this.getParameterMappingsFile(type); assertNotNull(mappings_file); assert(mappings_file.exists()); mappings = new ParameterMappingsSet(); mappings.load(mappings_file, catalog_db); } // Setup everything else (that's just how we roll up in this ma) this.info = this.generateInfo(catalogContext); this.hints = new DesignerHints(); } protected DesignerInfo generateInfo(CatalogContext catalogContext) { DesignerInfo info = new DesignerInfo(catalogContext, workload); info.setStats(stats); info.setMappings(mappings); info.setMappingsFile(mappings_file); info.setNumThreads(NUM_THREADS); info.setNumIntervals(NUM_INTERVALS); return (info); } }