diff --git a/src/test/java/org/apache/hadoop/hbase/PerformanceEvaluation.java b/src/test/java/org/apache/hadoop/hbase/PerformanceEvaluation.java index 8b00597..8618c0b 100644 --- a/src/test/java/org/apache/hadoop/hbase/PerformanceEvaluation.java +++ b/src/test/java/org/apache/hadoop/hbase/PerformanceEvaluation.java @@ -121,6 +121,7 @@ public class PerformanceEvaluation { private int R = ROWS_PER_GB; private boolean flushCommits = true; private boolean writeToWAL = true; + private int presplitRegions = 0; private static final Path PERF_EVAL_DIR = new Path("performance_evaluation"); /** @@ -465,18 +466,53 @@ public class PerformanceEvaluation { */ private boolean checkTable(HBaseAdmin admin) throws IOException { HTableDescriptor tableDescriptor = getTableDescriptor(); - boolean tableExists = admin.tableExists(tableDescriptor.getName()); - if (!tableExists) { - admin.createTable(tableDescriptor); - LOG.info("Table " + tableDescriptor + " created"); + if (this.presplitRegions > 0) { + // presplit requested + if (admin.tableExists(tableDescriptor.getName())) { + admin.disableTable(tableDescriptor.getName()); + admin.deleteTable(tableDescriptor.getName()); + } + + byte[][] splits = getSplits(); + for (int i=0; i < splits.length; i++) { + LOG.debug(" split " + i + ": " + Bytes.toStringBinary(splits[i])); + } + admin.createTable(tableDescriptor, splits); + LOG.info ("Table created with " + this.presplitRegions + " splits"); + } + else { + boolean tableExists = admin.tableExists(tableDescriptor.getName()); + if (!tableExists) { + admin.createTable(tableDescriptor); + LOG.info("Table " + tableDescriptor + " created"); + } } - return !tableExists; + boolean tableExists = admin.tableExists(tableDescriptor.getName()); + return tableExists; } protected HTableDescriptor getTableDescriptor() { return TABLE_DESCRIPTOR; } + /** + * generates splits based on total number of rows and specified split regions + * + * @return splits : array of byte [] + */ + protected byte[][] getSplits() { + if (this.presplitRegions == 0) + return new byte [0][]; + + byte[][] splits = new byte[this.presplitRegions][]; + int jump = this.R / this.presplitRegions; + for (int i=0; i cmdClass = determineCommandClass(cmd); if (cmdClass != null) { getArgs(i + 1, args);