You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2018/08/27 14:47:06 UTC

[01/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site be237220f -> e312f7735


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html
index 5d7cda3..d1be7a8 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html
@@ -58,62 +58,63 @@
 <span class="sourceLineNo">050</span><a name="line.50"></a>
 <span class="sourceLineNo">051</span>  @BeforeClass<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  public static void setUp() throws Exception {<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    UTIL.startMiniCluster(1);<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  }<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  @AfterClass<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  public static void tearDown() throws Exception {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    UTIL.shutdownMiniCluster();<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  @Test<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public void test() throws Exception {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    ReplicationPeerStorage peerStorage = ReplicationStorageFactory<a name="line.63"></a>
-<span class="sourceLineNo">064</span>        .getReplicationPeerStorage(UTIL.getZooKeeperWatcher(), UTIL.getConfiguration());<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    ReplicationQueueStorage queueStorage = ReplicationStorageFactory<a name="line.65"></a>
-<span class="sourceLineNo">066</span>        .getReplicationQueueStorage(UTIL.getZooKeeperWatcher(), UTIL.getConfiguration());<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>    String peerId1 = "1";<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    String peerId2 = "2";<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    peerStorage.addPeer(peerId1, ReplicationPeerConfig.newBuilder().setClusterKey("key").build(),<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      true, SyncReplicationState.NONE);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    peerStorage.addPeer(peerId2, ReplicationPeerConfig.newBuilder().setClusterKey("key").build(),<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      true, SyncReplicationState.NONE);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    for (int i = 0; i &lt; 10; i++) {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      queueStorage.addWAL(ServerName.valueOf("localhost", 10000 + i, 100000 + i), peerId1,<a name="line.75"></a>
-<span class="sourceLineNo">076</span>        "file-" + i);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    queueStorage.addWAL(ServerName.valueOf("localhost", 10000, 100000), peerId2, "file");<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    HBaseFsck fsck = HbckTestingUtil.doFsck(UTIL.getConfiguration(), true);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    HbckTestingUtil.assertNoErrors(fsck);<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>    // should not remove anything since the replication peer is still alive<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    assertEquals(10, queueStorage.getListOfReplicators().size());<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    peerStorage.removePeer(peerId1);<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    // there should be orphan queues<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    assertEquals(10, queueStorage.getListOfReplicators().size());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    fsck = HbckTestingUtil.doFsck(UTIL.getConfiguration(), false);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    HbckTestingUtil.assertErrors(fsck, Stream.generate(() -&gt; {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      return ERROR_CODE.UNDELETED_REPLICATION_QUEUE;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    }).limit(10).toArray(ERROR_CODE[]::new));<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>    // should not delete anything when fix is false<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    assertEquals(10, queueStorage.getListOfReplicators().size());<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>    fsck = HbckTestingUtil.doFsck(UTIL.getConfiguration(), true);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    HbckTestingUtil.assertErrors(fsck, Stream.generate(() -&gt; {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      return ERROR_CODE.UNDELETED_REPLICATION_QUEUE;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    }).limit(10).toArray(ERROR_CODE[]::new));<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>    List&lt;ServerName&gt; replicators = queueStorage.getListOfReplicators();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    // should not remove the server with queue for peerId2<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    assertEquals(1, replicators.size());<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    assertEquals(ServerName.valueOf("localhost", 10000, 100000), replicators.get(0));<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    for (String queueId : queueStorage.getAllQueues(replicators.get(0))) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      assertEquals(peerId2, queueId);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>}<a name="line.108"></a>
+<span class="sourceLineNo">053</span>    UTIL.getConfiguration().setBoolean("hbase.write.hbck1.lock.file", false);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    UTIL.startMiniCluster(1);<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  }<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  @AfterClass<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  public static void tearDown() throws Exception {<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    UTIL.shutdownMiniCluster();<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  }<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  @Test<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  public void test() throws Exception {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    ReplicationPeerStorage peerStorage = ReplicationStorageFactory<a name="line.64"></a>
+<span class="sourceLineNo">065</span>        .getReplicationPeerStorage(UTIL.getZooKeeperWatcher(), UTIL.getConfiguration());<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    ReplicationQueueStorage queueStorage = ReplicationStorageFactory<a name="line.66"></a>
+<span class="sourceLineNo">067</span>        .getReplicationQueueStorage(UTIL.getZooKeeperWatcher(), UTIL.getConfiguration());<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>    String peerId1 = "1";<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    String peerId2 = "2";<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    peerStorage.addPeer(peerId1, ReplicationPeerConfig.newBuilder().setClusterKey("key").build(),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      true, SyncReplicationState.NONE);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    peerStorage.addPeer(peerId2, ReplicationPeerConfig.newBuilder().setClusterKey("key").build(),<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      true, SyncReplicationState.NONE);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    for (int i = 0; i &lt; 10; i++) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      queueStorage.addWAL(ServerName.valueOf("localhost", 10000 + i, 100000 + i), peerId1,<a name="line.76"></a>
+<span class="sourceLineNo">077</span>        "file-" + i);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    queueStorage.addWAL(ServerName.valueOf("localhost", 10000, 100000), peerId2, "file");<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    HBaseFsck fsck = HbckTestingUtil.doFsck(UTIL.getConfiguration(), true);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    HbckTestingUtil.assertNoErrors(fsck);<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>    // should not remove anything since the replication peer is still alive<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    assertEquals(10, queueStorage.getListOfReplicators().size());<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    peerStorage.removePeer(peerId1);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    // there should be orphan queues<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    assertEquals(10, queueStorage.getListOfReplicators().size());<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    fsck = HbckTestingUtil.doFsck(UTIL.getConfiguration(), false);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    HbckTestingUtil.assertErrors(fsck, Stream.generate(() -&gt; {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      return ERROR_CODE.UNDELETED_REPLICATION_QUEUE;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    }).limit(10).toArray(ERROR_CODE[]::new));<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>    // should not delete anything when fix is false<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    assertEquals(10, queueStorage.getListOfReplicators().size());<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>    fsck = HbckTestingUtil.doFsck(UTIL.getConfiguration(), true);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    HbckTestingUtil.assertErrors(fsck, Stream.generate(() -&gt; {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      return ERROR_CODE.UNDELETED_REPLICATION_QUEUE;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    }).limit(10).toArray(ERROR_CODE[]::new));<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>    List&lt;ServerName&gt; replicators = queueStorage.getListOfReplicators();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    // should not remove the server with queue for peerId2<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    assertEquals(1, replicators.size());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    assertEquals(ServerName.valueOf("localhost", 10000, 100000), replicators.get(0));<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    for (String queueId : queueStorage.getAllQueues(replicators.get(0))) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      assertEquals(peerId2, queueId);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span>}<a name="line.109"></a>
 
 
 


[23/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"></a>
+<span class="sourceLine

<TRUNCATED>

[04/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"></a>
+<span class="sourc

<TRUNCATED>

[16/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange100Test.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=v

<TRUNCATED>

[29/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.BufferedMutatorTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;ncli

<TRUNCATED>

[05/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Test.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Test.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Test.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Test.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Test.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>

<TRUNCATED>

[14/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRangeTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;

<TRUNCATED>

[40/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/devapidocs/src-html/org/apache/hadoop/hbase/client/Table.CheckAndMutateBuilder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/Table.CheckAndMutateBuilder.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/Table.CheckAndMutateBuilder.html
index 192f920..fbdec56 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/Table.CheckAndMutateBuilder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/Table.CheckAndMutateBuilder.html
@@ -571,426 +571,425 @@
 <span class="sourceLineNo">563</span>   * under a single row lock, so write operations to a row are synchronized, and<a name="line.563"></a>
 <span class="sourceLineNo">564</span>   * readers are guaranteed to see this operation fully completed.<a name="line.564"></a>
 <span class="sourceLineNo">565</span>   *<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @param append object that specifies the columns and amounts to be used<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   *                  for the increment operations<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   * @throws IOException e<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * @return values of columns after the append operation (maybe null)<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   */<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  default Result append(final Append append) throws IOException {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    throw new NotImplementedException("Add an implementation!");<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  }<a name="line.573"></a>
-<span class="sourceLineNo">574</span><a name="line.574"></a>
-<span class="sourceLineNo">575</span>  /**<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * Increments one or more columns within a single row.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * &lt;p&gt;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * This operation ensures atomicity to readers. Increments are done<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * under a single row lock, so write operations to a row are synchronized, and<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   * readers are guaranteed to see this operation fully completed.<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   *<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   * @param increment object that specifies the columns and amounts to be used<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   *                  for the increment operations<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * @throws IOException e<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * @return values of columns after the increment<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  default Result increment(final Increment increment) throws IOException {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    throw new NotImplementedException("Add an implementation!");<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>  /**<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * See {@link #incrementColumnValue(byte[], byte[], byte[], long, Durability)}<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * &lt;p&gt;<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * The {@link Durability} is defaulted to {@link Durability#SYNC_WAL}.<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param row The row that contains the cell to increment.<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @param family The column family of the cell to increment.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @param qualifier The column qualifier of the cell to increment.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   * @param amount The amount to increment the cell with (or decrement, if the<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * amount is negative).<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * @return The new value, post increment.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   * @throws IOException if a remote or network exception occurs.<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
-<span class="sourceLineNo">603</span>  default long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier, long amount)<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      throws IOException {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    Increment increment = new Increment(row).addColumn(family, qualifier, amount);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    Cell cell = increment(increment).getColumnLatestCell(family, qualifier);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>  /**<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * Atomically increments a column value. If the column value already exists<a name="line.611"></a>
-<span class="sourceLineNo">612</span>   * and is not a big-endian long, this could throw an exception. If the column<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * value does not yet exist it is initialized to &lt;code&gt;amount&lt;/code&gt; and<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * written to the specified column.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   *<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * &lt;p&gt;Setting durability to {@link Durability#SKIP_WAL} means that in a fail<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * scenario you will lose any increments that have not been flushed.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * @param row The row that contains the cell to increment.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * @param family The column family of the cell to increment.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   * @param qualifier The column qualifier of the cell to increment.<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * @param amount The amount to increment the cell with (or decrement, if the<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * amount is negative).<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * @param durability The persistence guarantee for this increment.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @return The new value, post increment.<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * @throws IOException if a remote or network exception occurs.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   */<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  default long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier,<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    long amount, Durability durability) throws IOException {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    Increment increment = new Increment(row)<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        .addColumn(family, qualifier, amount)<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        .setDurability(durability);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    Cell cell = increment(increment).getColumnLatestCell(family, qualifier);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * Releases any resources held or pending changes in internal buffers.<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   *<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * @throws IOException if a remote or network exception occurs.<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   */<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  @Override<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  default void close() throws IOException {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    throw new NotImplementedException("Add an implementation!");<a name="line.643"></a>
-<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
-<span class="sourceLineNo">645</span><a name="line.645"></a>
-<span class="sourceLineNo">646</span>  /**<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * Creates and returns a {@link com.google.protobuf.RpcChannel} instance connected to the<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * table region containing the specified row.  The row given does not actually have<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * to exist.  Whichever region would contain the row based on start and end keys will<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * be used.  Note that the {@code row} parameter is also not passed to the<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   * coprocessor handler registered for this protocol, unless the {@code row}<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * is separately passed as an argument in the service request.  The parameter<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * here is only used to locate the region used to handle the call.<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   *<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * &lt;p&gt;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   * The obtained {@link com.google.protobuf.RpcChannel} instance can be used to access a published<a name="line.656"></a>
-<span class="sourceLineNo">657</span>   * coprocessor {@link com.google.protobuf.Service} using standard protobuf service invocations:<a name="line.657"></a>
-<span class="sourceLineNo">658</span>   * &lt;/p&gt;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   *<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * &lt;div style="background-color: #cccccc; padding: 2px"&gt;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;blockquote&gt;&lt;pre&gt;<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * CoprocessorRpcChannel channel = myTable.coprocessorService(rowkey);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * MyService.BlockingInterface service = MyService.newBlockingStub(channel);<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * MyCallRequest request = MyCallRequest.newBuilder()<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   *     ...<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   *     .build();<a name="line.666"></a>
-<span class="sourceLineNo">667</span>   * MyCallResponse response = service.myCall(null, request);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   * &lt;/pre&gt;&lt;/blockquote&gt;&lt;/div&gt;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   *<a name="line.669"></a>
-<span class="sourceLineNo">670</span>   * @param row The row key used to identify the remote region location<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * @return A CoprocessorRpcChannel instance<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   */<a name="line.672"></a>
-<span class="sourceLineNo">673</span>  default CoprocessorRpcChannel coprocessorService(byte[] row) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    throw new NotImplementedException("Add an implementation!");<a name="line.674"></a>
-<span class="sourceLineNo">675</span>  }<a name="line.675"></a>
-<span class="sourceLineNo">676</span><a name="line.676"></a>
-<span class="sourceLineNo">677</span>  /**<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.680"></a>
-<span class="sourceLineNo">681</span>   * with each {@link com.google.protobuf.Service} instance.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   *<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   * @param service the protocol buffer {@code Service} implementation to call<a name="line.683"></a>
-<span class="sourceLineNo">684</span>   * @param startKey start region selection with region containing this row.  If {@code null}, the<a name="line.684"></a>
-<span class="sourceLineNo">685</span>   *   selection will start with the first table region.<a name="line.685"></a>
-<span class="sourceLineNo">686</span>   * @param endKey select regions up to and including the region containing this row. If<a name="line.686"></a>
-<span class="sourceLineNo">687</span>   *   {@code null}, selection will continue through the last table region.<a name="line.687"></a>
-<span class="sourceLineNo">688</span>   * @param callable this instance's<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   *   {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   *   method will be invoked once per table region, using the {@link com.google.protobuf.Service}<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   *   instance connected to that region.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * @param &lt;T&gt; the {@link com.google.protobuf.Service} subclass to connect to<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @param &lt;R&gt; Return type for the {@code callable} parameter's {@link<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   * @return a map of result values keyed by region name<a name="line.695"></a>
-<span class="sourceLineNo">696</span>   */<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  default &lt;T extends Service, R&gt; Map&lt;byte[],R&gt; coprocessorService(final Class&lt;T&gt; service,<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    byte[] startKey, byte[] endKey, final Batch.Call&lt;T,R&gt; callable)<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    throws ServiceException, Throwable {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    throw new NotImplementedException("Add an implementation!");<a name="line.700"></a>
-<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   * with each {@link Service} instance.<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   *<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * &lt;p&gt; The given<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   * method will be called with the return value from each region's<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} invocation. &lt;/p&gt;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   *<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * @param service the protocol buffer {@code Service} implementation to call<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   * @param startKey start region selection with region containing this row.  If {@code null}, the<a name="line.715"></a>
-<span class="sourceLineNo">716</span>   *   selection will start with the first table region.<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * @param endKey select regions up to and including the region containing this row. If<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   *   {@code null}, selection will continue through the last table region.<a name="line.718"></a>
-<span class="sourceLineNo">719</span>   * @param callable this instance's<a name="line.719"></a>
-<span class="sourceLineNo">720</span>   *   {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   *   method will be invoked once per table region, using the {@link Service} instance connected to<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   *   that region.<a name="line.722"></a>
-<span class="sourceLineNo">723</span>   * @param &lt;T&gt; the {@link Service} subclass to connect to<a name="line.723"></a>
-<span class="sourceLineNo">724</span>   * @param &lt;R&gt; Return type for the {@code callable} parameter's {@link<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  default &lt;T extends Service, R&gt; void coprocessorService(final Class&lt;T&gt; service,<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    byte[] startKey, byte[] endKey, final Batch.Call&lt;T,R&gt; callable,<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    final Batch.Callback&lt;R&gt; callback) throws ServiceException, Throwable {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    throw new NotImplementedException("Add an implementation!");<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  }<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>  /**<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * the invocations to the same region server will be batched into one call. The coprocessor<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   * service is invoked according to the service instance, method name and parameters.<a name="line.737"></a>
-<span class="sourceLineNo">738</span>   *<a name="line.738"></a>
-<span class="sourceLineNo">739</span>   * @param methodDescriptor<a name="line.739"></a>
-<span class="sourceLineNo">740</span>   *          the descriptor for the protobuf service method to call.<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * @param request<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   *          the method call parameters<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * @param startKey<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   *          start region selection with region containing this row. If {@code null}, the<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   *          selection will start with the first table region.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param endKey<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   *          select regions up to and including the region containing this row. If {@code null},<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   *          selection will continue through the last table region.<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   * @param responsePrototype<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   *          the proto type of the response of the method in Service.<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   * @param &lt;R&gt;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   *          the response type for the coprocessor Service method<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @return a map of result values keyed by region name<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   */<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  default &lt;R extends Message&gt; Map&lt;byte[], R&gt; batchCoprocessorService(<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    Descriptors.MethodDescriptor methodDescriptor, Message request,<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    byte[] startKey, byte[] endKey, R responsePrototype) throws ServiceException, Throwable {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    throw new NotImplementedException("Add an implementation!");<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  /**<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * the invocations to the same region server will be batched into one call. The coprocessor<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * service is invoked according to the service instance, method name and parameters.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   *<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * &lt;p&gt;<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   * The given<a name="line.768"></a>
-<span class="sourceLineNo">769</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}<a name="line.769"></a>
-<span class="sourceLineNo">770</span>   * method will be called with the return value from each region's invocation.<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * &lt;/p&gt;<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   *<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * @param methodDescriptor the descriptor for the protobuf service method to call.<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   * @param request the method call parameters<a name="line.774"></a>
-<span class="sourceLineNo">775</span>   * @param startKey start region selection with region containing this row.<a name="line.775"></a>
-<span class="sourceLineNo">776</span>   *   If {@code null}, the selection will start with the first table region.<a name="line.776"></a>
-<span class="sourceLineNo">777</span>   * @param endKey select regions up to and including the region containing this row.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>   *   If {@code null}, selection will continue through the last table region.<a name="line.778"></a>
-<span class="sourceLineNo">779</span>   * @param responsePrototype the proto type of the response of the method in Service.<a name="line.779"></a>
-<span class="sourceLineNo">780</span>   * @param callback callback to invoke with the response for each region<a name="line.780"></a>
-<span class="sourceLineNo">781</span>   * @param &lt;R&gt;<a name="line.781"></a>
-<span class="sourceLineNo">782</span>   *          the response type for the coprocessor Service method<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   */<a name="line.783"></a>
-<span class="sourceLineNo">784</span>  default &lt;R extends Message&gt; void batchCoprocessorService(<a name="line.784"></a>
-<span class="sourceLineNo">785</span>      Descriptors.MethodDescriptor methodDescriptor, Message request, byte[] startKey,<a name="line.785"></a>
-<span class="sourceLineNo">786</span>      byte[] endKey, R responsePrototype, Batch.Callback&lt;R&gt; callback)<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      throws ServiceException, Throwable {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    throw new NotImplementedException("Add an implementation!");<a name="line.788"></a>
-<span class="sourceLineNo">789</span>  }<a name="line.789"></a>
-<span class="sourceLineNo">790</span><a name="line.790"></a>
-<span class="sourceLineNo">791</span>  /**<a name="line.791"></a>
-<span class="sourceLineNo">792</span>   * Atomically checks if a row/family/qualifier value matches the expected value.<a name="line.792"></a>
-<span class="sourceLineNo">793</span>   * If it does, it performs the row mutations.  If the passed value is null, the check<a name="line.793"></a>
-<span class="sourceLineNo">794</span>   * is for the lack of column (ie: non-existence)<a name="line.794"></a>
-<span class="sourceLineNo">795</span>   *<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * The expected value argument of this call is on the left and the current<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * value of the cell is on the right side of the comparison operator.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   *<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * Ie. eg. GREATER operator means expected value &gt; existing &lt;=&gt; perform row mutations.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   *<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * @param row to check<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @param family column family to check<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   * @param qualifier column qualifier to check<a name="line.803"></a>
-<span class="sourceLineNo">804</span>   * @param compareOp the comparison operator<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * @param value the expected value<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * @param mutation  mutations to perform if check succeeds<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   * @throws IOException e<a name="line.807"></a>
-<span class="sourceLineNo">808</span>   * @return true if the new put was executed, false otherwise<a name="line.808"></a>
-<span class="sourceLineNo">809</span>   * @deprecated Since 2.0.0. Will be removed in 3.0.0. Use {@link #checkAndMutate(byte[], byte[])}<a name="line.809"></a>
-<span class="sourceLineNo">810</span>   */<a name="line.810"></a>
-<span class="sourceLineNo">811</span>  @Deprecated<a name="line.811"></a>
-<span class="sourceLineNo">812</span>  default boolean checkAndMutate(byte[] row, byte[] family, byte[] qualifier,<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      CompareFilter.CompareOp compareOp, byte[] value, RowMutations mutation) throws IOException {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    throw new NotImplementedException("Add an implementation!");<a name="line.814"></a>
-<span class="sourceLineNo">815</span>  }<a name="line.815"></a>
-<span class="sourceLineNo">816</span><a name="line.816"></a>
-<span class="sourceLineNo">817</span>  /**<a name="line.817"></a>
-<span class="sourceLineNo">818</span>   * Atomically checks if a row/family/qualifier value matches the expected value.<a name="line.818"></a>
-<span class="sourceLineNo">819</span>   * If it does, it performs the row mutations.  If the passed value is null, the check<a name="line.819"></a>
-<span class="sourceLineNo">820</span>   * is for the lack of column (ie: non-existence)<a name="line.820"></a>
-<span class="sourceLineNo">821</span>   *<a name="line.821"></a>
-<span class="sourceLineNo">822</span>   * The expected value argument of this call is on the left and the current<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   * value of the cell is on the right side of the comparison operator.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>   *<a name="line.824"></a>
-<span class="sourceLineNo">825</span>   * Ie. eg. GREATER operator means expected value &gt; existing &lt;=&gt; perform row mutations.<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   *<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * @param row to check<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * @param family column family to check<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * @param qualifier column qualifier to check<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   * @param op the comparison operator<a name="line.830"></a>
-<span class="sourceLineNo">831</span>   * @param value the expected value<a name="line.831"></a>
-<span class="sourceLineNo">832</span>   * @param mutation  mutations to perform if check succeeds<a name="line.832"></a>
-<span class="sourceLineNo">833</span>   * @throws IOException e<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   * @return true if the new put was executed, false otherwise<a name="line.834"></a>
-<span class="sourceLineNo">835</span>   * @deprecated Since 2.0.0. Will be removed in 3.0.0. Use {@link #checkAndMutate(byte[], byte[])}<a name="line.835"></a>
-<span class="sourceLineNo">836</span>   */<a name="line.836"></a>
-<span class="sourceLineNo">837</span>  @Deprecated<a name="line.837"></a>
-<span class="sourceLineNo">838</span>  default boolean checkAndMutate(byte[] row, byte[] family, byte[] qualifier, CompareOperator op,<a name="line.838"></a>
-<span class="sourceLineNo">839</span>                         byte[] value, RowMutations mutation) throws IOException {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    throw new NotImplementedException("Add an implementation!");<a name="line.840"></a>
-<span class="sourceLineNo">841</span>  }<a name="line.841"></a>
-<span class="sourceLineNo">842</span><a name="line.842"></a>
-<span class="sourceLineNo">843</span>  /**<a name="line.843"></a>
-<span class="sourceLineNo">844</span>   * Get timeout of each rpc request in this Table instance. It will be overridden by a more<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * specific rpc timeout config such as readRpcTimeout or writeRpcTimeout.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   * @see #getReadRpcTimeout(TimeUnit)<a name="line.846"></a>
-<span class="sourceLineNo">847</span>   * @see #getWriteRpcTimeout(TimeUnit)<a name="line.847"></a>
-<span class="sourceLineNo">848</span>   * @param unit the unit of time the timeout to be represented in<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * @return rpc timeout in the specified time unit<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   */<a name="line.850"></a>
-<span class="sourceLineNo">851</span>  default long getRpcTimeout(TimeUnit unit) {<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    throw new NotImplementedException("Add an implementation!");<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  }<a name="line.853"></a>
-<span class="sourceLineNo">854</span><a name="line.854"></a>
-<span class="sourceLineNo">855</span>  /**<a name="line.855"></a>
-<span class="sourceLineNo">856</span>   * Get timeout (millisecond) of each rpc request in this Table instance.<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   *<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * @return Currently configured read timeout<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * @deprecated use {@link #getReadRpcTimeout(TimeUnit)} or<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   *             {@link #getWriteRpcTimeout(TimeUnit)} instead<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @Deprecated<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  default int getRpcTimeout() {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    return (int)getRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span>  /**<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * Set timeout (millisecond) of each rpc request in operations of this Table instance, will<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * override the value of hbase.rpc.timeout in configuration.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * If a rpc request waiting too long, it will stop waiting and send a new request to retry until<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * retries exhausted or operation timeout reached.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * &lt;p&gt;<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * NOTE: This will set both the read and write timeout settings to the provided value.<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   *<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   * @param rpcTimeout the timeout of each rpc request in millisecond.<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   *<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * @deprecated Use setReadRpcTimeout or setWriteRpcTimeout instead<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
-<span class="sourceLineNo">879</span>  @Deprecated<a name="line.879"></a>
-<span class="sourceLineNo">880</span>  default void setRpcTimeout(int rpcTimeout) {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    setReadRpcTimeout(rpcTimeout);<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    setWriteRpcTimeout(rpcTimeout);<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>  /**<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   * Get timeout of each rpc read request in this Table instance.<a name="line.886"></a>
-<span class="sourceLineNo">887</span>   * @param unit the unit of time the timeout to be represented in<a name="line.887"></a>
-<span class="sourceLineNo">888</span>   * @return read rpc timeout in the specified time unit<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   */<a name="line.889"></a>
-<span class="sourceLineNo">890</span>  default long getReadRpcTimeout(TimeUnit unit) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    throw new NotImplementedException("Add an implementation!");<a name="line.891"></a>
-<span class="sourceLineNo">892</span>  }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span>  /**<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   * Get timeout (millisecond) of each rpc read request in this Table instance.<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.896"></a>
-<span class="sourceLineNo">897</span>   *             use {@link #getReadRpcTimeout(TimeUnit)} instead<a name="line.897"></a>
-<span class="sourceLineNo">898</span>   */<a name="line.898"></a>
-<span class="sourceLineNo">899</span>  @Deprecated<a name="line.899"></a>
-<span class="sourceLineNo">900</span>  default int getReadRpcTimeout() {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    return (int)getReadRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>  }<a name="line.902"></a>
-<span class="sourceLineNo">903</span><a name="line.903"></a>
-<span class="sourceLineNo">904</span>  /**<a name="line.904"></a>
-<span class="sourceLineNo">905</span>   * Set timeout (millisecond) of each rpc read request in operations of this Table instance, will<a name="line.905"></a>
-<span class="sourceLineNo">906</span>   * override the value of hbase.rpc.read.timeout in configuration.<a name="line.906"></a>
-<span class="sourceLineNo">907</span>   * If a rpc read request waiting too long, it will stop waiting and send a new request to retry<a name="line.907"></a>
-<span class="sourceLineNo">908</span>   * until retries exhausted or operation timeout reached.<a name="line.908"></a>
-<span class="sourceLineNo">909</span>   *<a name="line.909"></a>
-<span class="sourceLineNo">910</span>   * @param readRpcTimeout the timeout for read rpc request in milliseconds<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setReadRpcTimeout} instead<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   */<a name="line.912"></a>
-<span class="sourceLineNo">913</span>  @Deprecated<a name="line.913"></a>
-<span class="sourceLineNo">914</span>  default void setReadRpcTimeout(int readRpcTimeout) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    throw new NotImplementedException("Add an implementation!");<a name="line.915"></a>
-<span class="sourceLineNo">916</span>  }<a name="line.916"></a>
-<span class="sourceLineNo">917</span><a name="line.917"></a>
-<span class="sourceLineNo">918</span>  /**<a name="line.918"></a>
-<span class="sourceLineNo">919</span>   * Get timeout of each rpc write request in this Table instance.<a name="line.919"></a>
-<span class="sourceLineNo">920</span>   * @param unit the unit of time the timeout to be represented in<a name="line.920"></a>
-<span class="sourceLineNo">921</span>   * @return write rpc timeout in the specified time unit<a name="line.921"></a>
-<span class="sourceLineNo">922</span>   */<a name="line.922"></a>
-<span class="sourceLineNo">923</span>  default long getWriteRpcTimeout(TimeUnit unit) {<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    throw new NotImplementedException("Add an implementation!");<a name="line.924"></a>
-<span class="sourceLineNo">925</span>  }<a name="line.925"></a>
-<span class="sourceLineNo">926</span><a name="line.926"></a>
-<span class="sourceLineNo">927</span>  /**<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   * Get timeout (millisecond) of each rpc write request in this Table instance.<a name="line.928"></a>
-<span class="sourceLineNo">929</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.929"></a>
-<span class="sourceLineNo">930</span>   *             use {@link #getWriteRpcTimeout(TimeUnit)} instead<a name="line.930"></a>
-<span class="sourceLineNo">931</span>   */<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  @Deprecated<a name="line.932"></a>
-<span class="sourceLineNo">933</span>  default int getWriteRpcTimeout() {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    return (int)getWriteRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.934"></a>
-<span class="sourceLineNo">935</span>  }<a name="line.935"></a>
-<span class="sourceLineNo">936</span><a name="line.936"></a>
-<span class="sourceLineNo">937</span>  /**<a name="line.937"></a>
-<span class="sourceLineNo">938</span>   * Set timeout (millisecond) of each rpc write request in operations of this Table instance, will<a name="line.938"></a>
-<span class="sourceLineNo">939</span>   * override the value of hbase.rpc.write.timeout in configuration.<a name="line.939"></a>
-<span class="sourceLineNo">940</span>   * If a rpc write request waiting too long, it will stop waiting and send a new request to retry<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   * until retries exhausted or operation timeout reached.<a name="line.941"></a>
-<span class="sourceLineNo">942</span>   *<a name="line.942"></a>
-<span class="sourceLineNo">943</span>   * @param writeRpcTimeout the timeout for write rpc request in milliseconds<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setWriteRpcTimeout} instead<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   */<a name="line.945"></a>
-<span class="sourceLineNo">946</span>  @Deprecated<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  default void setWriteRpcTimeout(int writeRpcTimeout) {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    throw new NotImplementedException("Add an implementation!");<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>  /**<a name="line.951"></a>
-<span class="sourceLineNo">952</span>   * Get timeout of each operation in Table instance.<a name="line.952"></a>
-<span class="sourceLineNo">953</span>   * @param unit the unit of time the timeout to be represented in<a name="line.953"></a>
-<span class="sourceLineNo">954</span>   * @return operation rpc timeout in the specified time unit<a name="line.954"></a>
-<span class="sourceLineNo">955</span>   */<a name="line.955"></a>
-<span class="sourceLineNo">956</span>  default long getOperationTimeout(TimeUnit unit) {<a name="line.956"></a>
-<span class="sourceLineNo">957</span>    throw new NotImplementedException("Add an implementation!");<a name="line.957"></a>
-<span class="sourceLineNo">958</span>  }<a name="line.958"></a>
-<span class="sourceLineNo">959</span><a name="line.959"></a>
-<span class="sourceLineNo">960</span>  /**<a name="line.960"></a>
-<span class="sourceLineNo">961</span>   * Get timeout (millisecond) of each operation for in Table instance.<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   *             use {@link #getOperationTimeout(TimeUnit)} instead<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   */<a name="line.964"></a>
-<span class="sourceLineNo">965</span>  @Deprecated<a name="line.965"></a>
-<span class="sourceLineNo">966</span>  default int getOperationTimeout() {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    return (int)getOperationTimeout(TimeUnit.MILLISECONDS);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  }<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>  /**<a name="line.970"></a>
-<span class="sourceLineNo">971</span>   * Set timeout (millisecond) of each operation in this Table instance, will override the value<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   * of hbase.client.operation.timeout in configuration.<a name="line.972"></a>
-<span class="sourceLineNo">973</span>   * Operation timeout is a top-level restriction that makes sure a blocking method will not be<a name="line.973"></a>
-<span class="sourceLineNo">974</span>   * blocked more than this. In each operation, if rpc request fails because of timeout or<a name="line.974"></a>
-<span class="sourceLineNo">975</span>   * other reason, it will retry until success or throw a RetriesExhaustedException. But if the<a name="line.975"></a>
-<span class="sourceLineNo">976</span>   * total time being blocking reach the operation timeout before retries exhausted, it will break<a name="line.976"></a>
-<span class="sourceLineNo">977</span>   * early and throw SocketTimeoutException.<a name="line.977"></a>
-<span class="sourceLineNo">978</span>   * @param operationTimeout the total timeout of each operation in millisecond.<a name="line.978"></a>
-<span class="sourceLineNo">979</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setOperationTimeout} instead<a name="line.979"></a>
-<span class="sourceLineNo">980</span>   */<a name="line.980"></a>
-<span class="sourceLineNo">981</span>  @Deprecated<a name="line.981"></a>
-<span class="sourceLineNo">982</span>  default void setOperationTimeout(int operationTimeout) {<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    throw new NotImplementedException("Add an implementation!");<a name="line.983"></a>
-<span class="sourceLineNo">984</span>  }<a name="line.984"></a>
-<span class="sourceLineNo">985</span>}<a name="line.985"></a>
+<span class="sourceLineNo">566</span>   * @param append object that specifies the columns and values to be appended<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @throws IOException e<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   * @return values of columns after the append operation (maybe null)<a name="line.568"></a>
+<span class="sourceLineNo">569</span>   */<a name="line.569"></a>
+<span class="sourceLineNo">570</span>  default Result append(final Append append) throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    throw new NotImplementedException("Add an implementation!");<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>  /**<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * Increments one or more columns within a single row.<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * &lt;p&gt;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * This operation ensures atomicity to readers. Increments are done<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * under a single row lock, so write operations to a row are synchronized, and<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * readers are guaranteed to see this operation fully completed.<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   *<a name="line.580"></a>
+<span class="sourceLineNo">581</span>   * @param increment object that specifies the columns and amounts to be used<a name="line.581"></a>
+<span class="sourceLineNo">582</span>   *                  for the increment operations<a name="line.582"></a>
+<span class="sourceLineNo">583</span>   * @throws IOException e<a name="line.583"></a>
+<span class="sourceLineNo">584</span>   * @return values of columns after the increment<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
+<span class="sourceLineNo">586</span>  default Result increment(final Increment increment) throws IOException {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    throw new NotImplementedException("Add an implementation!");<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span><a name="line.589"></a>
+<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
+<span class="sourceLineNo">591</span>   * See {@link #incrementColumnValue(byte[], byte[], byte[], long, Durability)}<a name="line.591"></a>
+<span class="sourceLineNo">592</span>   * &lt;p&gt;<a name="line.592"></a>
+<span class="sourceLineNo">593</span>   * The {@link Durability} is defaulted to {@link Durability#SYNC_WAL}.<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @param row The row that contains the cell to increment.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   * @param family The column family of the cell to increment.<a name="line.595"></a>
+<span class="sourceLineNo">596</span>   * @param qualifier The column qualifier of the cell to increment.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>   * @param amount The amount to increment the cell with (or decrement, if the<a name="line.597"></a>
+<span class="sourceLineNo">598</span>   * amount is negative).<a name="line.598"></a>
+<span class="sourceLineNo">599</span>   * @return The new value, post increment.<a name="line.599"></a>
+<span class="sourceLineNo">600</span>   * @throws IOException if a remote or network exception occurs.<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  default long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier, long amount)<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      throws IOException {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    Increment increment = new Increment(row).addColumn(family, qualifier, amount);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    Cell cell = increment(increment).getColumnLatestCell(family, qualifier);<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());<a name="line.606"></a>
+<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>  /**<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   * Atomically increments a column value. If the column value already exists<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * and is not a big-endian long, this could throw an exception. If the column<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * value does not yet exist it is initialized to &lt;code&gt;amount&lt;/code&gt; and<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   * written to the specified column.<a name="line.613"></a>
+<span class="sourceLineNo">614</span>   *<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * &lt;p&gt;Setting durability to {@link Durability#SKIP_WAL} means that in a fail<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   * scenario you will lose any increments that have not been flushed.<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   * @param row The row that contains the cell to increment.<a name="line.617"></a>
+<span class="sourceLineNo">618</span>   * @param family The column family of the cell to increment.<a name="line.618"></a>
+<span class="sourceLineNo">619</span>   * @param qualifier The column qualifier of the cell to increment.<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * @param amount The amount to increment the cell with (or decrement, if the<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * amount is negative).<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @param durability The persistence guarantee for this increment.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * @return The new value, post increment.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * @throws IOException if a remote or network exception occurs.<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
+<span class="sourceLineNo">626</span>  default long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier,<a name="line.626"></a>
+<span class="sourceLineNo">627</span>    long amount, Durability durability) throws IOException {<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    Increment increment = new Increment(row)<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        .addColumn(family, qualifier, amount)<a name="line.629"></a>
+<span class="sourceLineNo">630</span>        .setDurability(durability);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    Cell cell = increment(increment).getColumnLatestCell(family, qualifier);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  }<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>  /**<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * Releases any resources held or pending changes in internal buffers.<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   *<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @throws IOException if a remote or network exception occurs.<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  @Override<a name="line.640"></a>
+<span class="sourceLineNo">641</span>  default void close() throws IOException {<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    throw new NotImplementedException("Add an implementation!");<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Creates and returns a {@link com.google.protobuf.RpcChannel} instance connected to the<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * table region containing the specified row.  The row given does not actually have<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * to exist.  Whichever region would contain the row based on start and end keys will<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   * be used.  Note that the {@code row} parameter is also not passed to the<a name="line.649"></a>
+<span class="sourceLineNo">650</span>   * coprocessor handler registered for this protocol, unless the {@code row}<a name="line.650"></a>
+<span class="sourceLineNo">651</span>   * is separately passed as an argument in the service request.  The parameter<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * here is only used to locate the region used to handle the call.<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   *<a name="line.653"></a>
+<span class="sourceLineNo">654</span>   * &lt;p&gt;<a name="line.654"></a>
+<span class="sourceLineNo">655</span>   * The obtained {@link com.google.protobuf.RpcChannel} instance can be used to access a published<a name="line.655"></a>
+<span class="sourceLineNo">656</span>   * coprocessor {@link com.google.protobuf.Service} using standard protobuf service invocations:<a name="line.656"></a>
+<span class="sourceLineNo">657</span>   * &lt;/p&gt;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>   *<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * &lt;div style="background-color: #cccccc; padding: 2px"&gt;<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * &lt;blockquote&gt;&lt;pre&gt;<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * CoprocessorRpcChannel channel = myTable.coprocessorService(rowkey);<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * MyService.BlockingInterface service = MyService.newBlockingStub(channel);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   * MyCallRequest request = MyCallRequest.newBuilder()<a name="line.663"></a>
+<span class="sourceLineNo">664</span>   *     ...<a name="line.664"></a>
+<span class="sourceLineNo">665</span>   *     .build();<a name="line.665"></a>
+<span class="sourceLineNo">666</span>   * MyCallResponse response = service.myCall(null, request);<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   * &lt;/pre&gt;&lt;/blockquote&gt;&lt;/div&gt;<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   *<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * @param row The row key used to identify the remote region location<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * @return A CoprocessorRpcChannel instance<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   */<a name="line.671"></a>
+<span class="sourceLineNo">672</span>  default CoprocessorRpcChannel coprocessorService(byte[] row) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    throw new NotImplementedException("Add an implementation!");<a name="line.673"></a>
+<span class="sourceLineNo">674</span>  }<a name="line.674"></a>
+<span class="sourceLineNo">675</span><a name="line.675"></a>
+<span class="sourceLineNo">676</span>  /**<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and<a name="line.678"></a>
+<span class="sourceLineNo">679</span>   * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * with each {@link com.google.protobuf.Service} instance.<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   *<a name="line.681"></a>
+<span class="sourceLineNo">682</span>   * @param service the protocol buffer {@code Service} implementation to call<a name="line.682"></a>
+<span class="sourceLineNo">683</span>   * @param startKey start region selection with region containing this row.  If {@code null}, the<a name="line.683"></a>
+<span class="sourceLineNo">684</span>   *   selection will start with the first table region.<a name="line.684"></a>
+<span class="sourceLineNo">685</span>   * @param endKey select regions up to and including the region containing this row. If<a name="line.685"></a>
+<span class="sourceLineNo">686</span>   *   {@code null}, selection will continue through the last table region.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * @param callable this instance's<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   *   {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   *   method will be invoked once per table region, using the {@link com.google.protobuf.Service}<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   *   instance connected to that region.<a name="line.690"></a>
+<span class="sourceLineNo">691</span>   * @param &lt;T&gt; the {@link com.google.protobuf.Service} subclass to connect to<a name="line.691"></a>
+<span class="sourceLineNo">692</span>   * @param &lt;R&gt; Return type for the {@code callable} parameter's {@link<a name="line.692"></a>
+<span class="sourceLineNo">693</span>   * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.693"></a>
+<span class="sourceLineNo">694</span>   * @return a map of result values keyed by region name<a name="line.694"></a>
+<span class="sourceLineNo">695</span>   */<a name="line.695"></a>
+<span class="sourceLineNo">696</span>  default &lt;T extends Service, R&gt; Map&lt;byte[],R&gt; coprocessorService(final Class&lt;T&gt; service,<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    byte[] startKey, byte[] endKey, final Batch.Call&lt;T,R&gt; callable)<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    throws ServiceException, Throwable {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    throw new NotImplementedException("Add an implementation!");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>  }<a name="line.700"></a>
+<span class="sourceLineNo">701</span><a name="line.701"></a>
+<span class="sourceLineNo">702</span>  /**<a name="line.702"></a>
+<span class="sourceLineNo">703</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.703"></a>
+<span class="sourceLineNo">704</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and<a name="line.704"></a>
+<span class="sourceLineNo">705</span>   * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.705"></a>
+<span class="sourceLineNo">706</span>   * with each {@link Service} instance.<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   *<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * &lt;p&gt; The given<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}<a name="line.709"></a>
+<span class="sourceLineNo">710</span>   * method will be called with the return value from each region's<a name="line.710"></a>
+<span class="sourceLineNo">711</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} invocation. &lt;/p&gt;<a name="line.711"></a>
+<span class="sourceLineNo">712</span>   *<a name="line.712"></a>
+<span class="sourceLineNo">713</span>   * @param service the protocol buffer {@code Service} implementation to call<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * @param startKey start region selection with region containing this row.  If {@code null}, the<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   *   selection will start with the first table region.<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @param endKey select regions up to and including the region containing this row. If<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   *   {@code null}, selection will continue through the last table region.<a name="line.717"></a>
+<span class="sourceLineNo">718</span>   * @param callable this instance's<a name="line.718"></a>
+<span class="sourceLineNo">719</span>   *   {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}<a name="line.719"></a>
+<span class="sourceLineNo">720</span>   *   method will be invoked once per table region, using the {@link Service} instance connected to<a name="line.720"></a>
+<span class="sourceLineNo">721</span>   *   that region.<a name="line.721"></a>
+<span class="sourceLineNo">722</span>   * @param &lt;T&gt; the {@link Service} subclass to connect to<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * @param &lt;R&gt; Return type for the {@code callable} parameter's {@link<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   */<a name="line.725"></a>
+<span class="sourceLineNo">726</span>  default &lt;T extends Service, R&gt; void coprocessorService(final Class&lt;T&gt; service,<a name="line.726"></a>
+<span class="sourceLineNo">727</span>    byte[] startKey, byte[] endKey, final Batch.Call&lt;T,R&gt; callable,<a name="line.727"></a>
+<span class="sourceLineNo">728</span>    final Batch.Callback&lt;R&gt; callback) throws ServiceException, Throwable {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    throw new NotImplementedException("Add an implementation!");<a name="line.729"></a>
+<span class="sourceLineNo">730</span>  }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>  /**<a name="line.732"></a>
+<span class="sourceLineNo">733</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.733"></a>
+<span class="sourceLineNo">734</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all<a name="line.734"></a>
+<span class="sourceLineNo">735</span>   * the invocations to the same region server will be batched into one call. The coprocessor<a name="line.735"></a>
+<span class="sourceLineNo">736</span>   * service is invoked according to the service instance, method name and parameters.<a name="line.736"></a>
+<span class="sourceLineNo">737</span>   *<a name="line.737"></a>
+<span class="sourceLineNo">738</span>   * @param methodDescriptor<a name="line.738"></a>
+<span class="sourceLineNo">739</span>   *          the descriptor for the protobuf service method to call.<a name="line.739"></a>
+<span class="sourceLineNo">740</span>   * @param request<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   *          the method call parameters<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * @param startKey<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   *          start region selection with region containing this row. If {@code null}, the<a name="line.743"></a>
+<span class="sourceLineNo">744</span>   *          selection will start with the first table region.<a name="line.744"></a>
+<span class="sourceLineNo">745</span>   * @param endKey<a name="line.745"></a>
+<span class="sourceLineNo">746</span>   *          select regions up to and including the region containing this row. If {@code null},<a name="line.746"></a>
+<span class="sourceLineNo">747</span>   *          selection will continue through the last table region.<a name="line.747"></a>
+<span class="sourceLineNo">748</span>   * @param responsePrototype<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   *          the proto type of the response of the method in Service.<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * @param &lt;R&gt;<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   *          the response type for the coprocessor Service method<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return a map of result values keyed by region name<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  default &lt;R extends Message&gt; Map&lt;byte[], R&gt; batchCoprocessorService(<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    Descriptors.MethodDescriptor methodDescriptor, Message request,<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    byte[] startKey, byte[] endKey, R responsePrototype) throws ServiceException, Throwable {<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    throw new NotImplementedException("Add an implementation!");<a name="line.757"></a>
+<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
+<span class="sourceLineNo">759</span><a name="line.759"></a>
+<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   * the invocations to the same region server will be batched into one call. The coprocessor<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * service is invoked according to the service instance, method name and parameters.<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   *<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * &lt;p&gt;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * The given<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}<a name="line.768"></a>
+<span class="sourceLineNo">769</span>   * method will be called with the return value from each region's invocation.<a name="line.769"></a>
+<span class="sourceLineNo">770</span>   * &lt;/p&gt;<a name="line.770"></a>
+<span class="sourceLineNo">771</span>   *<a name="line.771"></a>
+<span class="sourceLineNo">772</span>   * @param methodDescriptor the descriptor for the protobuf service method to call.<a name="line.772"></a>
+<span class="sourceLineNo">773</span>   * @param request the method call parameters<a name="line.773"></a>
+<span class="sourceLineNo">774</span>   * @param startKey start region selection with region containing this row.<a name="line.774"></a>
+<span class="sourceLineNo">775</span>   *   If {@code null}, the selection will start with the first table region.<a name="line.775"></a>
+<span class="sourceLineNo">776</span>   * @param endKey select regions up to and including the region containing this row.<a name="line.776"></a>
+<span class="sourceLineNo">777</span>   *   If {@code null}, selection will continue through the last table region.<a name="line.777"></a>
+<span class="sourceLineNo">778</span>   * @param responsePrototype the proto type of the response of the method in Service.<a name="line.778"></a>
+<span class="sourceLineNo">779</span>   * @param callback callback to invoke with the response for each region<a name="line.779"></a>
+<span class="sourceLineNo">780</span>   * @param &lt;R&gt;<a name="line.780"></a>
+<span class="sourceLineNo">781</span>   *          the response type for the coprocessor Service method<a name="line.781"></a>
+<span class="sourceLineNo">782</span>   */<a name="line.782"></a>
+<span class="sourceLineNo">783</span>  default &lt;R extends Message&gt; void batchCoprocessorService(<a name="line.783"></a>
+<span class="sourceLineNo">784</span>      Descriptors.MethodDescriptor methodDescriptor, Message request, byte[] startKey,<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      byte[] endKey, R responsePrototype, Batch.Callback&lt;R&gt; callback)<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      throws ServiceException, Throwable {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    throw new NotImplementedException("Add an implementation!");<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  }<a name="line.788"></a>
+<span class="sourceLineNo">789</span><a name="line.789"></a>
+<span class="sourceLineNo">790</span>  /**<a name="line.790"></a>
+<span class="sourceLineNo">791</span>   * Atomically checks if a row/family/qualifier value matches the expected value.<a name="line.791"></a>
+<span class="sourceLineNo">792</span>   * If it does, it performs the row mutations.  If the passed value is null, the check<a name="line.792"></a>
+<span class="sourceLineNo">793</span>   * is for the lack of column (ie: non-existence)<a name="line.793"></a>
+<span class="sourceLineNo">794</span>   *<a name="line.794"></a>
+<span class="sourceLineNo">795</span>   * The expected value argument of this call is on the left and the current<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * value of the cell is on the right side of the comparison operator.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   *<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   * Ie. eg. GREATER operator means expected value &gt; existing &lt;=&gt; perform row mutations.<a name="line.798"></a>
+<span class="sourceLineNo">799</span>   *<a name="line.799"></a>
+<span class="sourceLineNo">800</span>   * @param row to check<a name="line.800"></a>
+<span class="sourceLineNo">801</span>   * @param family column family to check<a name="line.801"></a>
+<span class="sourceLineNo">802</span>   * @param qualifier column qualifier to check<a name="line.802"></a>
+<span class="sourceLineNo">803</span>   * @param compareOp the comparison operator<a name="line.803"></a>
+<span class="sourceLineNo">804</span>   * @param value the expected value<a name="line.804"></a>
+<span class="sourceLineNo">805</span>   * @param mutation  mutations to perform if check succeeds<a name="line.805"></a>
+<span class="sourceLineNo">806</span>   * @throws IOException e<a name="line.806"></a>
+<span class="sourceLineNo">807</span>   * @return true if the new put was executed, false otherwise<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @deprecated Since 2.0.0. Will be removed in 3.0.0. Use {@link #checkAndMutate(byte[], byte[])}<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   */<a name="line.809"></a>
+<span class="sourceLineNo">810</span>  @Deprecated<a name="line.810"></a>
+<span class="sourceLineNo">811</span>  default boolean checkAndMutate(byte[] row, byte[] family, byte[] qualifier,<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      CompareFilter.CompareOp compareOp, byte[] value, RowMutations mutation) throws IOException {<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    throw new NotImplementedException("Add an implementation!");<a name="line.813"></a>
+<span class="sourceLineNo">814</span>  }<a name="line.814"></a>
+<span class="sourceLineNo">815</span><a name="line.815"></a>
+<span class="sourceLineNo">816</span>  /**<a name="line.816"></a>
+<span class="sourceLineNo">817</span>   * Atomically checks if a row/family/qualifier value matches the expected value.<a name="line.817"></a>
+<span class="sourceLineNo">818</span>   * If it does, it performs the row mutations.  If the passed value is null, the check<a name="line.818"></a>
+<span class="sourceLineNo">819</span>   * is for the lack of column (ie: non-existence)<a name="line.819"></a>
+<span class="sourceLineNo">820</span>   *<a name="line.820"></a>
+<span class="sourceLineNo">821</span>   * The expected value argument of this call is on the left and the current<a name="line.821"></a>
+<span class="sourceLineNo">822</span>   * value of the cell is on the right side of the comparison operator.<a name="line.822"></a>
+<span class="sourceLineNo">823</span>   *<a name="line.823"></a>
+<span class="sourceLineNo">824</span>   * Ie. eg. GREATER operator means expected value &gt; existing &lt;=&gt; perform row mutations.<a name="line.824"></a>
+<span class="sourceLineNo">825</span>   *<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * @param row to check<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * @param family column family to check<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * @param qualifier column qualifier to check<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * @param op the comparison operator<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * @param value the expected value<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * @param mutation  mutations to perform if check succeeds<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   * @throws IOException e<a name="line.832"></a>
+<span class="sourceLineNo">833</span>   * @return true if the new put was executed, false otherwise<a name="line.833"></a>
+<span class="sourceLineNo">834</span>   * @deprecated Since 2.0.0. Will be removed in 3.0.0. Use {@link #checkAndMutate(byte[], byte[])}<a name="line.834"></a>
+<span class="sourceLineNo">835</span>   */<a name="line.835"></a>
+<span class="sourceLineNo">836</span>  @Deprecated<a name="line.836"></a>
+<span class="sourceLineNo">837</span>  default boolean checkAndMutate(byte[] row, byte[] family, byte[] qualifier, CompareOperator op,<a name="line.837"></a>
+<span class="sourceLineNo">838</span>                         byte[] value, RowMutations mutation) throws IOException {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    throw new NotImplementedException("Add an implementation!");<a name="line.839"></a>
+<span class="sourceLineNo">840</span>  }<a name="line.840"></a>
+<span class="sourceLineNo">841</span><a name="line.841"></a>
+<span class="sourceLineNo">842</span>  /**<a name="line.842"></a>
+<span class="sourceLineNo">843</span>   * Get timeout of each rpc request in this Table instance. It will be overridden by a more<a name="line.843"></a>
+<span class="sourceLineNo">844</span>   * specific rpc timeout config such as readRpcTimeout or writeRpcTimeout.<a name="line.844"></a>
+<span class="sourceLineNo">845</span>   * @see #getReadRpcTimeout(TimeUnit)<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * @see #getWriteRpcTimeout(TimeUnit)<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   * @param unit the unit of time the timeout to be represented in<a name="line.847"></a>
+<span class="sourceLineNo">848</span>   * @return rpc timeout in the specified time unit<a name="line.848"></a>
+<span class="sourceLineNo">849</span>   */<a name="line.849"></a>
+<span class="sourceLineNo">850</span>  default long getRpcTimeout(TimeUnit unit) {<a name="line.850"></a>
+<span class="sourceLineNo">851</span>    throw new NotImplementedException("Add an implementation!");<a name="line.851"></a>
+<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
+<span class="sourceLineNo">853</span><a name="line.853"></a>
+<span class="sourceLineNo">854</span>  /**<a name="line.854"></a>
+<span class="sourceLineNo">855</span>   * Get timeout (millisecond) of each rpc request in this Table instance.<a name="line.855"></a>
+<span class="sourceLineNo">856</span>   *<a name="line.856"></a>
+<span class="sourceLineNo">857</span>   * @return Currently configured read timeout<a name="line.857"></a>
+<span class="sourceLineNo">858</span>   * @deprecated use {@link #getReadRpcTimeout(TimeUnit)} or<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   *             {@link #getWriteRpcTimeout(TimeUnit)} instead<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   */<a name="line.860"></a>
+<span class="sourceLineNo">861</span>  @Deprecated<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  default int getRpcTimeout() {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>    return (int)getRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.863"></a>
+<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
+<span class="sourceLineNo">865</span><a name="line.865"></a>
+<span class="sourceLineNo">866</span>  /**<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * Set timeout (millisecond) of each rpc request in operations of this Table instance, will<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * override the value of hbase.rpc.timeout in configuration.<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   * If a rpc request waiting too long, it will stop waiting and send a new request to retry until<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   * retries exhausted or operation timeout reached.<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * &lt;p&gt;<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * NOTE: This will set both the read and write timeout settings to the provided value.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   *<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * @param rpcTimeout the timeout of each rpc request in millisecond.<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   *<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @deprecated Use setReadRpcTimeout or setWriteRpcTimeout instead<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   */<a name="line.877"></a>
+<span class="sourceLineNo">878</span>  @Deprecated<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  default void setRpcTimeout(int rpcTimeout) {<a name="line.879"></a>
+<span class="sourceLineNo">880</span>    setReadRpcTimeout(rpcTimeout);<a name="line.880"></a>
+<span class="sourceLineNo">881</span>    setWriteRpcTimeout(rpcTimeout);<a name="line.881"></a>
+<span class="sourceLineNo">882</span>  }<a name="line.882"></a>
+<span class="sourceLineNo">883</span><a name="line.883"></a>
+<span class="sourceLineNo">884</span>  /**<a name="line.884"></a>
+<span class="sourceLineNo">885</span>   * Get timeout of each rpc read request in this Table instance.<a name="line.885"></a>
+<span class="sourceLineNo">886</span>   * @param unit the unit of time the timeout to be represented in<a name="line.886"></a>
+<span class="sourceLineNo">887</span>   * @return read rpc timeout in the specified time unit<a name="line.887"></a>
+<span class="sourceLineNo">888</span>   */<a name="line.888"></a>
+<span class="sourceLineNo">889</span>  default long getReadRpcTimeout(TimeUnit unit) {<a name="line.889"></a>
+<span class="sourceLineNo">890</span>    throw new NotImplementedException("Add an implementation!");<a name="line.890"></a>
+<span class="sourceLineNo">891</span>  }<a name="line.891"></a>
+<span class="sourceLineNo">892</span><a name="line.892"></a>
+<span class="sourceLineNo">893</span>  /**<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   * Get timeout (millisecond) of each rpc read request in this Table instance.<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.895"></a>
+<span class="sourceLineNo">896</span>   *             use {@link #getReadRpcTimeout(TimeUnit)} instead<a name="line.896"></a>
+<span class="sourceLineNo">897</span>   */<a name="line.897"></a>
+<span class="sourceLineNo">898</span>  @Deprecated<a name="line.898"></a>
+<span class="sourceLineNo">899</span>  default int getReadRpcTimeout() {<a name="line.899"></a>
+<span class="sourceLineNo">900</span>    return (int)getReadRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.900"></a>
+<span class="sourceLineNo">901</span>  }<a name="line.901"></a>
+<span class="sourceLineNo">902</span><a name="line.902"></a>
+<span class="sourceLineNo">903</span>  /**<a name="line.903"></a>
+<span class="sourceLineNo">904</span>   * Set timeout (millisecond) of each rpc read request in operations of this Table instance, will<a name="line.904"></a>
+<span class="sourceLineNo">905</span>   * override the value of hbase.rpc.read.timeout in configuration.<a name="line.905"></a>
+<span class="sourceLineNo">906</span>   * If a rpc read request waiting too long, it will stop waiting and send a new request to retry<a name="line.906"></a>
+<span class="sourceLineNo">907</span>   * until retries exhausted or operation timeout reached.<a name="line.907"></a>
+<span class="sourceLineNo">908</span>   *<a name="line.908"></a>
+<span class="sourceLineNo">909</span>   * @param readRpcTimeout the timeout for read rpc request in milliseconds<a name="line.909"></a>
+<span class="sourceLineNo">910</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setReadRpcTimeout} instead<a name="line.910"></a>
+<span class="sourceLineNo">911</span>   */<a name="line.911"></a>
+<span class="sourceLineNo">912</span>  @Deprecated<a name="line.912"></a>
+<span class="sourceLineNo">913</span>  default void setReadRpcTimeout(int readRpcTimeout) {<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    throw new NotImplementedException("Add an implementation!");<a name="line.914"></a>
+<span class="sourceLineNo">915</span>  }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span>  /**<a name="line.917"></a>
+<span class="sourceLineNo">918</span>   * Get timeout of each rpc write request in this Table instance.<a name="line.918"></a>
+<span class="sourceLineNo">919</span>   * @param unit the unit of time the timeout to be represented in<a name="line.919"></a>
+<span class="sourceLineNo">920</span>   * @return write rpc timeout in the specified time unit<a name="line.920"></a>
+<span class="sourceLineNo">921</span>   */<a name="line.921"></a>
+<span class="sourceLineNo">922</span>  default long getWriteRpcTimeout(TimeUnit unit) {<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    throw new NotImplementedException("Add an implementation!");<a name="line.923"></a>
+<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
+<span class="sourceLineNo">925</span><a name="line.925"></a>
+<span class="sourceLineNo">926</span>  /**<a name="line.926"></a>
+<span class="sourceLineNo">927</span>   * Get timeout (millisecond) of each rpc write request in this Table instance.<a name="line.927"></a>
+<span class="sourceLineNo">928</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.928"></a>
+<span class="sourceLineNo">929</span>   *             use {@link #getWriteRpcTimeout(TimeUnit)} instead<a name="line.929"></a>
+<span class="sourceLineNo">930</span>   */<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  @Deprecated<a name="line.931"></a>
+<span class="sourceLineNo">932</span>  default int getWriteRpcTimeout() {<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    return (int)getWriteRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.933"></a>
+<span class="sourceLineNo">934</span>  }<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span>  /**<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   * Set timeout (millisecond) of each rpc write request in operations of this Table instance, will<a name="line.937"></a>
+<span class="sourceLineNo">938</span>   * override the value of hbase.rpc.write.timeout in configuration.<a name="line.938"></a>
+<span class="sourceLineNo">939</span>   * If a rpc write request waiting too long, it will stop waiting and send a new request to retry<a name="line.939"></a>
+<span class="sourceLineNo">940</span>   * until retries exhausted or operation timeout reached.<a name="line.940"></a>
+<span class="sourceLineNo">941</span>   *<a name="line.941"></a>
+<span class="sourceLineNo">942</span>   * @param writeRpcTimeout the timeout for write rpc request in milliseconds<a name="line.942"></a>
+<span class="sourceLineNo">943</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setWriteRpcTimeout} instead<a name="line.943"></a>
+<span class="sourceLineNo">944</span>   */<a name="line.944"></a>
+<span class="sourceLineNo">945</span>  @Deprecated<a name="line.945"></a>
+<span class="sourceLineNo">946</span>  default void setWriteRpcTimeout(int writeRpcTimeout) {<a name="line.946"></a>
+<span class="sourceLineNo">947</span>    throw new NotImplementedException("Add an implementation!");<a name="line.947"></a>
+<span class="sourceLineNo">948</span>  }<a name="line.948"></a>
+<span class="sourceLineNo">949</span><a name="line.949"></a>
+<span class="sourceLineNo">950</span>  /**<a name="line.950"></a>
+<span class="sourceLineNo">951</span>   * Get timeout of each operation in Table instance.<a name="line.951"></a>
+<span class="sourceLineNo">952</span>   * @param unit the unit of time the timeout to be represented in<a name="line.952"></a>
+<span class="sourceLineNo">953</span>   * @return operation rpc timeout in the specified time unit<a name="line.953"></a>
+<span class="sourceLineNo">954</span>   */<a name="line.954"></a>
+<span class="sourceLineNo">955</span>  default long getOperationTimeout(TimeUnit unit) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span>    throw new NotImplementedException("Add an implementation!");<a name="line.956"></a>
+<span class="sourceLineNo">957</span>  }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span>  /**<a name="line.959"></a>
+<span class="sourceLineNo">960</span>   * Get timeout (millisecond) of each operation for in Table instance.<a name="line.960"></a>
+<span class="sourceLineNo">961</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.961"></a>
+<span class="sourceLineNo">962</span>   *             use {@link #getOperationTimeout(TimeUnit)} inst

<TRUNCATED>

[42/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/apidocs/src-html/org/apache/hadoop/hbase/client/Table.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/Table.html b/apidocs/src-html/org/apache/hadoop/hbase/client/Table.html
index 192f920..fbdec56 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/Table.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/Table.html
@@ -571,426 +571,425 @@
 <span class="sourceLineNo">563</span>   * under a single row lock, so write operations to a row are synchronized, and<a name="line.563"></a>
 <span class="sourceLineNo">564</span>   * readers are guaranteed to see this operation fully completed.<a name="line.564"></a>
 <span class="sourceLineNo">565</span>   *<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @param append object that specifies the columns and amounts to be used<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   *                  for the increment operations<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   * @throws IOException e<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * @return values of columns after the append operation (maybe null)<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   */<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  default Result append(final Append append) throws IOException {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    throw new NotImplementedException("Add an implementation!");<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  }<a name="line.573"></a>
-<span class="sourceLineNo">574</span><a name="line.574"></a>
-<span class="sourceLineNo">575</span>  /**<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * Increments one or more columns within a single row.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * &lt;p&gt;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * This operation ensures atomicity to readers. Increments are done<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * under a single row lock, so write operations to a row are synchronized, and<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   * readers are guaranteed to see this operation fully completed.<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   *<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   * @param increment object that specifies the columns and amounts to be used<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   *                  for the increment operations<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * @throws IOException e<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * @return values of columns after the increment<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  default Result increment(final Increment increment) throws IOException {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    throw new NotImplementedException("Add an implementation!");<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>  /**<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * See {@link #incrementColumnValue(byte[], byte[], byte[], long, Durability)}<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * &lt;p&gt;<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * The {@link Durability} is defaulted to {@link Durability#SYNC_WAL}.<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param row The row that contains the cell to increment.<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @param family The column family of the cell to increment.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @param qualifier The column qualifier of the cell to increment.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   * @param amount The amount to increment the cell with (or decrement, if the<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * amount is negative).<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * @return The new value, post increment.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   * @throws IOException if a remote or network exception occurs.<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
-<span class="sourceLineNo">603</span>  default long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier, long amount)<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      throws IOException {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    Increment increment = new Increment(row).addColumn(family, qualifier, amount);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    Cell cell = increment(increment).getColumnLatestCell(family, qualifier);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>  /**<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * Atomically increments a column value. If the column value already exists<a name="line.611"></a>
-<span class="sourceLineNo">612</span>   * and is not a big-endian long, this could throw an exception. If the column<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * value does not yet exist it is initialized to &lt;code&gt;amount&lt;/code&gt; and<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * written to the specified column.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   *<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * &lt;p&gt;Setting durability to {@link Durability#SKIP_WAL} means that in a fail<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * scenario you will lose any increments that have not been flushed.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * @param row The row that contains the cell to increment.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * @param family The column family of the cell to increment.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   * @param qualifier The column qualifier of the cell to increment.<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * @param amount The amount to increment the cell with (or decrement, if the<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * amount is negative).<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * @param durability The persistence guarantee for this increment.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @return The new value, post increment.<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * @throws IOException if a remote or network exception occurs.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   */<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  default long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier,<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    long amount, Durability durability) throws IOException {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    Increment increment = new Increment(row)<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        .addColumn(family, qualifier, amount)<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        .setDurability(durability);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    Cell cell = increment(increment).getColumnLatestCell(family, qualifier);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * Releases any resources held or pending changes in internal buffers.<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   *<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * @throws IOException if a remote or network exception occurs.<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   */<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  @Override<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  default void close() throws IOException {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    throw new NotImplementedException("Add an implementation!");<a name="line.643"></a>
-<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
-<span class="sourceLineNo">645</span><a name="line.645"></a>
-<span class="sourceLineNo">646</span>  /**<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * Creates and returns a {@link com.google.protobuf.RpcChannel} instance connected to the<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * table region containing the specified row.  The row given does not actually have<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * to exist.  Whichever region would contain the row based on start and end keys will<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * be used.  Note that the {@code row} parameter is also not passed to the<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   * coprocessor handler registered for this protocol, unless the {@code row}<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * is separately passed as an argument in the service request.  The parameter<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * here is only used to locate the region used to handle the call.<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   *<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * &lt;p&gt;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   * The obtained {@link com.google.protobuf.RpcChannel} instance can be used to access a published<a name="line.656"></a>
-<span class="sourceLineNo">657</span>   * coprocessor {@link com.google.protobuf.Service} using standard protobuf service invocations:<a name="line.657"></a>
-<span class="sourceLineNo">658</span>   * &lt;/p&gt;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   *<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * &lt;div style="background-color: #cccccc; padding: 2px"&gt;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;blockquote&gt;&lt;pre&gt;<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * CoprocessorRpcChannel channel = myTable.coprocessorService(rowkey);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * MyService.BlockingInterface service = MyService.newBlockingStub(channel);<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * MyCallRequest request = MyCallRequest.newBuilder()<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   *     ...<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   *     .build();<a name="line.666"></a>
-<span class="sourceLineNo">667</span>   * MyCallResponse response = service.myCall(null, request);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   * &lt;/pre&gt;&lt;/blockquote&gt;&lt;/div&gt;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   *<a name="line.669"></a>
-<span class="sourceLineNo">670</span>   * @param row The row key used to identify the remote region location<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * @return A CoprocessorRpcChannel instance<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   */<a name="line.672"></a>
-<span class="sourceLineNo">673</span>  default CoprocessorRpcChannel coprocessorService(byte[] row) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    throw new NotImplementedException("Add an implementation!");<a name="line.674"></a>
-<span class="sourceLineNo">675</span>  }<a name="line.675"></a>
-<span class="sourceLineNo">676</span><a name="line.676"></a>
-<span class="sourceLineNo">677</span>  /**<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.680"></a>
-<span class="sourceLineNo">681</span>   * with each {@link com.google.protobuf.Service} instance.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   *<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   * @param service the protocol buffer {@code Service} implementation to call<a name="line.683"></a>
-<span class="sourceLineNo">684</span>   * @param startKey start region selection with region containing this row.  If {@code null}, the<a name="line.684"></a>
-<span class="sourceLineNo">685</span>   *   selection will start with the first table region.<a name="line.685"></a>
-<span class="sourceLineNo">686</span>   * @param endKey select regions up to and including the region containing this row. If<a name="line.686"></a>
-<span class="sourceLineNo">687</span>   *   {@code null}, selection will continue through the last table region.<a name="line.687"></a>
-<span class="sourceLineNo">688</span>   * @param callable this instance's<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   *   {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   *   method will be invoked once per table region, using the {@link com.google.protobuf.Service}<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   *   instance connected to that region.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * @param &lt;T&gt; the {@link com.google.protobuf.Service} subclass to connect to<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @param &lt;R&gt; Return type for the {@code callable} parameter's {@link<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   * @return a map of result values keyed by region name<a name="line.695"></a>
-<span class="sourceLineNo">696</span>   */<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  default &lt;T extends Service, R&gt; Map&lt;byte[],R&gt; coprocessorService(final Class&lt;T&gt; service,<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    byte[] startKey, byte[] endKey, final Batch.Call&lt;T,R&gt; callable)<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    throws ServiceException, Throwable {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    throw new NotImplementedException("Add an implementation!");<a name="line.700"></a>
-<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   * with each {@link Service} instance.<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   *<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * &lt;p&gt; The given<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   * method will be called with the return value from each region's<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} invocation. &lt;/p&gt;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   *<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * @param service the protocol buffer {@code Service} implementation to call<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   * @param startKey start region selection with region containing this row.  If {@code null}, the<a name="line.715"></a>
-<span class="sourceLineNo">716</span>   *   selection will start with the first table region.<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * @param endKey select regions up to and including the region containing this row. If<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   *   {@code null}, selection will continue through the last table region.<a name="line.718"></a>
-<span class="sourceLineNo">719</span>   * @param callable this instance's<a name="line.719"></a>
-<span class="sourceLineNo">720</span>   *   {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   *   method will be invoked once per table region, using the {@link Service} instance connected to<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   *   that region.<a name="line.722"></a>
-<span class="sourceLineNo">723</span>   * @param &lt;T&gt; the {@link Service} subclass to connect to<a name="line.723"></a>
-<span class="sourceLineNo">724</span>   * @param &lt;R&gt; Return type for the {@code callable} parameter's {@link<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  default &lt;T extends Service, R&gt; void coprocessorService(final Class&lt;T&gt; service,<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    byte[] startKey, byte[] endKey, final Batch.Call&lt;T,R&gt; callable,<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    final Batch.Callback&lt;R&gt; callback) throws ServiceException, Throwable {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    throw new NotImplementedException("Add an implementation!");<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  }<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>  /**<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * the invocations to the same region server will be batched into one call. The coprocessor<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   * service is invoked according to the service instance, method name and parameters.<a name="line.737"></a>
-<span class="sourceLineNo">738</span>   *<a name="line.738"></a>
-<span class="sourceLineNo">739</span>   * @param methodDescriptor<a name="line.739"></a>
-<span class="sourceLineNo">740</span>   *          the descriptor for the protobuf service method to call.<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * @param request<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   *          the method call parameters<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * @param startKey<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   *          start region selection with region containing this row. If {@code null}, the<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   *          selection will start with the first table region.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param endKey<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   *          select regions up to and including the region containing this row. If {@code null},<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   *          selection will continue through the last table region.<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   * @param responsePrototype<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   *          the proto type of the response of the method in Service.<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   * @param &lt;R&gt;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   *          the response type for the coprocessor Service method<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @return a map of result values keyed by region name<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   */<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  default &lt;R extends Message&gt; Map&lt;byte[], R&gt; batchCoprocessorService(<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    Descriptors.MethodDescriptor methodDescriptor, Message request,<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    byte[] startKey, byte[] endKey, R responsePrototype) throws ServiceException, Throwable {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    throw new NotImplementedException("Add an implementation!");<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  /**<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * the invocations to the same region server will be batched into one call. The coprocessor<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * service is invoked according to the service instance, method name and parameters.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   *<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * &lt;p&gt;<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   * The given<a name="line.768"></a>
-<span class="sourceLineNo">769</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}<a name="line.769"></a>
-<span class="sourceLineNo">770</span>   * method will be called with the return value from each region's invocation.<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * &lt;/p&gt;<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   *<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * @param methodDescriptor the descriptor for the protobuf service method to call.<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   * @param request the method call parameters<a name="line.774"></a>
-<span class="sourceLineNo">775</span>   * @param startKey start region selection with region containing this row.<a name="line.775"></a>
-<span class="sourceLineNo">776</span>   *   If {@code null}, the selection will start with the first table region.<a name="line.776"></a>
-<span class="sourceLineNo">777</span>   * @param endKey select regions up to and including the region containing this row.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>   *   If {@code null}, selection will continue through the last table region.<a name="line.778"></a>
-<span class="sourceLineNo">779</span>   * @param responsePrototype the proto type of the response of the method in Service.<a name="line.779"></a>
-<span class="sourceLineNo">780</span>   * @param callback callback to invoke with the response for each region<a name="line.780"></a>
-<span class="sourceLineNo">781</span>   * @param &lt;R&gt;<a name="line.781"></a>
-<span class="sourceLineNo">782</span>   *          the response type for the coprocessor Service method<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   */<a name="line.783"></a>
-<span class="sourceLineNo">784</span>  default &lt;R extends Message&gt; void batchCoprocessorService(<a name="line.784"></a>
-<span class="sourceLineNo">785</span>      Descriptors.MethodDescriptor methodDescriptor, Message request, byte[] startKey,<a name="line.785"></a>
-<span class="sourceLineNo">786</span>      byte[] endKey, R responsePrototype, Batch.Callback&lt;R&gt; callback)<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      throws ServiceException, Throwable {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    throw new NotImplementedException("Add an implementation!");<a name="line.788"></a>
-<span class="sourceLineNo">789</span>  }<a name="line.789"></a>
-<span class="sourceLineNo">790</span><a name="line.790"></a>
-<span class="sourceLineNo">791</span>  /**<a name="line.791"></a>
-<span class="sourceLineNo">792</span>   * Atomically checks if a row/family/qualifier value matches the expected value.<a name="line.792"></a>
-<span class="sourceLineNo">793</span>   * If it does, it performs the row mutations.  If the passed value is null, the check<a name="line.793"></a>
-<span class="sourceLineNo">794</span>   * is for the lack of column (ie: non-existence)<a name="line.794"></a>
-<span class="sourceLineNo">795</span>   *<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * The expected value argument of this call is on the left and the current<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * value of the cell is on the right side of the comparison operator.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   *<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * Ie. eg. GREATER operator means expected value &gt; existing &lt;=&gt; perform row mutations.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   *<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * @param row to check<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @param family column family to check<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   * @param qualifier column qualifier to check<a name="line.803"></a>
-<span class="sourceLineNo">804</span>   * @param compareOp the comparison operator<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * @param value the expected value<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * @param mutation  mutations to perform if check succeeds<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   * @throws IOException e<a name="line.807"></a>
-<span class="sourceLineNo">808</span>   * @return true if the new put was executed, false otherwise<a name="line.808"></a>
-<span class="sourceLineNo">809</span>   * @deprecated Since 2.0.0. Will be removed in 3.0.0. Use {@link #checkAndMutate(byte[], byte[])}<a name="line.809"></a>
-<span class="sourceLineNo">810</span>   */<a name="line.810"></a>
-<span class="sourceLineNo">811</span>  @Deprecated<a name="line.811"></a>
-<span class="sourceLineNo">812</span>  default boolean checkAndMutate(byte[] row, byte[] family, byte[] qualifier,<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      CompareFilter.CompareOp compareOp, byte[] value, RowMutations mutation) throws IOException {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    throw new NotImplementedException("Add an implementation!");<a name="line.814"></a>
-<span class="sourceLineNo">815</span>  }<a name="line.815"></a>
-<span class="sourceLineNo">816</span><a name="line.816"></a>
-<span class="sourceLineNo">817</span>  /**<a name="line.817"></a>
-<span class="sourceLineNo">818</span>   * Atomically checks if a row/family/qualifier value matches the expected value.<a name="line.818"></a>
-<span class="sourceLineNo">819</span>   * If it does, it performs the row mutations.  If the passed value is null, the check<a name="line.819"></a>
-<span class="sourceLineNo">820</span>   * is for the lack of column (ie: non-existence)<a name="line.820"></a>
-<span class="sourceLineNo">821</span>   *<a name="line.821"></a>
-<span class="sourceLineNo">822</span>   * The expected value argument of this call is on the left and the current<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   * value of the cell is on the right side of the comparison operator.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>   *<a name="line.824"></a>
-<span class="sourceLineNo">825</span>   * Ie. eg. GREATER operator means expected value &gt; existing &lt;=&gt; perform row mutations.<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   *<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * @param row to check<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * @param family column family to check<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * @param qualifier column qualifier to check<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   * @param op the comparison operator<a name="line.830"></a>
-<span class="sourceLineNo">831</span>   * @param value the expected value<a name="line.831"></a>
-<span class="sourceLineNo">832</span>   * @param mutation  mutations to perform if check succeeds<a name="line.832"></a>
-<span class="sourceLineNo">833</span>   * @throws IOException e<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   * @return true if the new put was executed, false otherwise<a name="line.834"></a>
-<span class="sourceLineNo">835</span>   * @deprecated Since 2.0.0. Will be removed in 3.0.0. Use {@link #checkAndMutate(byte[], byte[])}<a name="line.835"></a>
-<span class="sourceLineNo">836</span>   */<a name="line.836"></a>
-<span class="sourceLineNo">837</span>  @Deprecated<a name="line.837"></a>
-<span class="sourceLineNo">838</span>  default boolean checkAndMutate(byte[] row, byte[] family, byte[] qualifier, CompareOperator op,<a name="line.838"></a>
-<span class="sourceLineNo">839</span>                         byte[] value, RowMutations mutation) throws IOException {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    throw new NotImplementedException("Add an implementation!");<a name="line.840"></a>
-<span class="sourceLineNo">841</span>  }<a name="line.841"></a>
-<span class="sourceLineNo">842</span><a name="line.842"></a>
-<span class="sourceLineNo">843</span>  /**<a name="line.843"></a>
-<span class="sourceLineNo">844</span>   * Get timeout of each rpc request in this Table instance. It will be overridden by a more<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * specific rpc timeout config such as readRpcTimeout or writeRpcTimeout.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   * @see #getReadRpcTimeout(TimeUnit)<a name="line.846"></a>
-<span class="sourceLineNo">847</span>   * @see #getWriteRpcTimeout(TimeUnit)<a name="line.847"></a>
-<span class="sourceLineNo">848</span>   * @param unit the unit of time the timeout to be represented in<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * @return rpc timeout in the specified time unit<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   */<a name="line.850"></a>
-<span class="sourceLineNo">851</span>  default long getRpcTimeout(TimeUnit unit) {<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    throw new NotImplementedException("Add an implementation!");<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  }<a name="line.853"></a>
-<span class="sourceLineNo">854</span><a name="line.854"></a>
-<span class="sourceLineNo">855</span>  /**<a name="line.855"></a>
-<span class="sourceLineNo">856</span>   * Get timeout (millisecond) of each rpc request in this Table instance.<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   *<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * @return Currently configured read timeout<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * @deprecated use {@link #getReadRpcTimeout(TimeUnit)} or<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   *             {@link #getWriteRpcTimeout(TimeUnit)} instead<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @Deprecated<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  default int getRpcTimeout() {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    return (int)getRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span>  /**<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * Set timeout (millisecond) of each rpc request in operations of this Table instance, will<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * override the value of hbase.rpc.timeout in configuration.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * If a rpc request waiting too long, it will stop waiting and send a new request to retry until<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * retries exhausted or operation timeout reached.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * &lt;p&gt;<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * NOTE: This will set both the read and write timeout settings to the provided value.<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   *<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   * @param rpcTimeout the timeout of each rpc request in millisecond.<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   *<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * @deprecated Use setReadRpcTimeout or setWriteRpcTimeout instead<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
-<span class="sourceLineNo">879</span>  @Deprecated<a name="line.879"></a>
-<span class="sourceLineNo">880</span>  default void setRpcTimeout(int rpcTimeout) {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    setReadRpcTimeout(rpcTimeout);<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    setWriteRpcTimeout(rpcTimeout);<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>  /**<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   * Get timeout of each rpc read request in this Table instance.<a name="line.886"></a>
-<span class="sourceLineNo">887</span>   * @param unit the unit of time the timeout to be represented in<a name="line.887"></a>
-<span class="sourceLineNo">888</span>   * @return read rpc timeout in the specified time unit<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   */<a name="line.889"></a>
-<span class="sourceLineNo">890</span>  default long getReadRpcTimeout(TimeUnit unit) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    throw new NotImplementedException("Add an implementation!");<a name="line.891"></a>
-<span class="sourceLineNo">892</span>  }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span>  /**<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   * Get timeout (millisecond) of each rpc read request in this Table instance.<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.896"></a>
-<span class="sourceLineNo">897</span>   *             use {@link #getReadRpcTimeout(TimeUnit)} instead<a name="line.897"></a>
-<span class="sourceLineNo">898</span>   */<a name="line.898"></a>
-<span class="sourceLineNo">899</span>  @Deprecated<a name="line.899"></a>
-<span class="sourceLineNo">900</span>  default int getReadRpcTimeout() {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    return (int)getReadRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>  }<a name="line.902"></a>
-<span class="sourceLineNo">903</span><a name="line.903"></a>
-<span class="sourceLineNo">904</span>  /**<a name="line.904"></a>
-<span class="sourceLineNo">905</span>   * Set timeout (millisecond) of each rpc read request in operations of this Table instance, will<a name="line.905"></a>
-<span class="sourceLineNo">906</span>   * override the value of hbase.rpc.read.timeout in configuration.<a name="line.906"></a>
-<span class="sourceLineNo">907</span>   * If a rpc read request waiting too long, it will stop waiting and send a new request to retry<a name="line.907"></a>
-<span class="sourceLineNo">908</span>   * until retries exhausted or operation timeout reached.<a name="line.908"></a>
-<span class="sourceLineNo">909</span>   *<a name="line.909"></a>
-<span class="sourceLineNo">910</span>   * @param readRpcTimeout the timeout for read rpc request in milliseconds<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setReadRpcTimeout} instead<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   */<a name="line.912"></a>
-<span class="sourceLineNo">913</span>  @Deprecated<a name="line.913"></a>
-<span class="sourceLineNo">914</span>  default void setReadRpcTimeout(int readRpcTimeout) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    throw new NotImplementedException("Add an implementation!");<a name="line.915"></a>
-<span class="sourceLineNo">916</span>  }<a name="line.916"></a>
-<span class="sourceLineNo">917</span><a name="line.917"></a>
-<span class="sourceLineNo">918</span>  /**<a name="line.918"></a>
-<span class="sourceLineNo">919</span>   * Get timeout of each rpc write request in this Table instance.<a name="line.919"></a>
-<span class="sourceLineNo">920</span>   * @param unit the unit of time the timeout to be represented in<a name="line.920"></a>
-<span class="sourceLineNo">921</span>   * @return write rpc timeout in the specified time unit<a name="line.921"></a>
-<span class="sourceLineNo">922</span>   */<a name="line.922"></a>
-<span class="sourceLineNo">923</span>  default long getWriteRpcTimeout(TimeUnit unit) {<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    throw new NotImplementedException("Add an implementation!");<a name="line.924"></a>
-<span class="sourceLineNo">925</span>  }<a name="line.925"></a>
-<span class="sourceLineNo">926</span><a name="line.926"></a>
-<span class="sourceLineNo">927</span>  /**<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   * Get timeout (millisecond) of each rpc write request in this Table instance.<a name="line.928"></a>
-<span class="sourceLineNo">929</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.929"></a>
-<span class="sourceLineNo">930</span>   *             use {@link #getWriteRpcTimeout(TimeUnit)} instead<a name="line.930"></a>
-<span class="sourceLineNo">931</span>   */<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  @Deprecated<a name="line.932"></a>
-<span class="sourceLineNo">933</span>  default int getWriteRpcTimeout() {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    return (int)getWriteRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.934"></a>
-<span class="sourceLineNo">935</span>  }<a name="line.935"></a>
-<span class="sourceLineNo">936</span><a name="line.936"></a>
-<span class="sourceLineNo">937</span>  /**<a name="line.937"></a>
-<span class="sourceLineNo">938</span>   * Set timeout (millisecond) of each rpc write request in operations of this Table instance, will<a name="line.938"></a>
-<span class="sourceLineNo">939</span>   * override the value of hbase.rpc.write.timeout in configuration.<a name="line.939"></a>
-<span class="sourceLineNo">940</span>   * If a rpc write request waiting too long, it will stop waiting and send a new request to retry<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   * until retries exhausted or operation timeout reached.<a name="line.941"></a>
-<span class="sourceLineNo">942</span>   *<a name="line.942"></a>
-<span class="sourceLineNo">943</span>   * @param writeRpcTimeout the timeout for write rpc request in milliseconds<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setWriteRpcTimeout} instead<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   */<a name="line.945"></a>
-<span class="sourceLineNo">946</span>  @Deprecated<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  default void setWriteRpcTimeout(int writeRpcTimeout) {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    throw new NotImplementedException("Add an implementation!");<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>  /**<a name="line.951"></a>
-<span class="sourceLineNo">952</span>   * Get timeout of each operation in Table instance.<a name="line.952"></a>
-<span class="sourceLineNo">953</span>   * @param unit the unit of time the timeout to be represented in<a name="line.953"></a>
-<span class="sourceLineNo">954</span>   * @return operation rpc timeout in the specified time unit<a name="line.954"></a>
-<span class="sourceLineNo">955</span>   */<a name="line.955"></a>
-<span class="sourceLineNo">956</span>  default long getOperationTimeout(TimeUnit unit) {<a name="line.956"></a>
-<span class="sourceLineNo">957</span>    throw new NotImplementedException("Add an implementation!");<a name="line.957"></a>
-<span class="sourceLineNo">958</span>  }<a name="line.958"></a>
-<span class="sourceLineNo">959</span><a name="line.959"></a>
-<span class="sourceLineNo">960</span>  /**<a name="line.960"></a>
-<span class="sourceLineNo">961</span>   * Get timeout (millisecond) of each operation for in Table instance.<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   *             use {@link #getOperationTimeout(TimeUnit)} instead<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   */<a name="line.964"></a>
-<span class="sourceLineNo">965</span>  @Deprecated<a name="line.965"></a>
-<span class="sourceLineNo">966</span>  default int getOperationTimeout() {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    return (int)getOperationTimeout(TimeUnit.MILLISECONDS);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  }<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>  /**<a name="line.970"></a>
-<span class="sourceLineNo">971</span>   * Set timeout (millisecond) of each operation in this Table instance, will override the value<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   * of hbase.client.operation.timeout in configuration.<a name="line.972"></a>
-<span class="sourceLineNo">973</span>   * Operation timeout is a top-level restriction that makes sure a blocking method will not be<a name="line.973"></a>
-<span class="sourceLineNo">974</span>   * blocked more than this. In each operation, if rpc request fails because of timeout or<a name="line.974"></a>
-<span class="sourceLineNo">975</span>   * other reason, it will retry until success or throw a RetriesExhaustedException. But if the<a name="line.975"></a>
-<span class="sourceLineNo">976</span>   * total time being blocking reach the operation timeout before retries exhausted, it will break<a name="line.976"></a>
-<span class="sourceLineNo">977</span>   * early and throw SocketTimeoutException.<a name="line.977"></a>
-<span class="sourceLineNo">978</span>   * @param operationTimeout the total timeout of each operation in millisecond.<a name="line.978"></a>
-<span class="sourceLineNo">979</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setOperationTimeout} instead<a name="line.979"></a>
-<span class="sourceLineNo">980</span>   */<a name="line.980"></a>
-<span class="sourceLineNo">981</span>  @Deprecated<a name="line.981"></a>
-<span class="sourceLineNo">982</span>  default void setOperationTimeout(int operationTimeout) {<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    throw new NotImplementedException("Add an implementation!");<a name="line.983"></a>
-<span class="sourceLineNo">984</span>  }<a name="line.984"></a>
-<span class="sourceLineNo">985</span>}<a name="line.985"></a>
+<span class="sourceLineNo">566</span>   * @param append object that specifies the columns and values to be appended<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @throws IOException e<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   * @return values of columns after the append operation (maybe null)<a name="line.568"></a>
+<span class="sourceLineNo">569</span>   */<a name="line.569"></a>
+<span class="sourceLineNo">570</span>  default Result append(final Append append) throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    throw new NotImplementedException("Add an implementation!");<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>  /**<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * Increments one or more columns within a single row.<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * &lt;p&gt;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * This operation ensures atomicity to readers. Increments are done<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * under a single row lock, so write operations to a row are synchronized, and<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * readers are guaranteed to see this operation fully completed.<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   *<a name="line.580"></a>
+<span class="sourceLineNo">581</span>   * @param increment object that specifies the columns and amounts to be used<a name="line.581"></a>
+<span class="sourceLineNo">582</span>   *                  for the increment operations<a name="line.582"></a>
+<span class="sourceLineNo">583</span>   * @throws IOException e<a name="line.583"></a>
+<span class="sourceLineNo">584</span>   * @return values of columns after the increment<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
+<span class="sourceLineNo">586</span>  default Result increment(final Increment increment) throws IOException {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    throw new NotImplementedException("Add an implementation!");<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span><a name="line.589"></a>
+<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
+<span class="sourceLineNo">591</span>   * See {@link #incrementColumnValue(byte[], byte[], byte[], long, Durability)}<a name="line.591"></a>
+<span class="sourceLineNo">592</span>   * &lt;p&gt;<a name="line.592"></a>
+<span class="sourceLineNo">593</span>   * The {@link Durability} is defaulted to {@link Durability#SYNC_WAL}.<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @param row The row that contains the cell to increment.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   * @param family The column family of the cell to increment.<a name="line.595"></a>
+<span class="sourceLineNo">596</span>   * @param qualifier The column qualifier of the cell to increment.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>   * @param amount The amount to increment the cell with (or decrement, if the<a name="line.597"></a>
+<span class="sourceLineNo">598</span>   * amount is negative).<a name="line.598"></a>
+<span class="sourceLineNo">599</span>   * @return The new value, post increment.<a name="line.599"></a>
+<span class="sourceLineNo">600</span>   * @throws IOException if a remote or network exception occurs.<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  default long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier, long amount)<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      throws IOException {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    Increment increment = new Increment(row).addColumn(family, qualifier, amount);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    Cell cell = increment(increment).getColumnLatestCell(family, qualifier);<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());<a name="line.606"></a>
+<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>  /**<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   * Atomically increments a column value. If the column value already exists<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * and is not a big-endian long, this could throw an exception. If the column<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * value does not yet exist it is initialized to &lt;code&gt;amount&lt;/code&gt; and<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   * written to the specified column.<a name="line.613"></a>
+<span class="sourceLineNo">614</span>   *<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * &lt;p&gt;Setting durability to {@link Durability#SKIP_WAL} means that in a fail<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   * scenario you will lose any increments that have not been flushed.<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   * @param row The row that contains the cell to increment.<a name="line.617"></a>
+<span class="sourceLineNo">618</span>   * @param family The column family of the cell to increment.<a name="line.618"></a>
+<span class="sourceLineNo">619</span>   * @param qualifier The column qualifier of the cell to increment.<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * @param amount The amount to increment the cell with (or decrement, if the<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * amount is negative).<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @param durability The persistence guarantee for this increment.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * @return The new value, post increment.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * @throws IOException if a remote or network exception occurs.<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
+<span class="sourceLineNo">626</span>  default long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier,<a name="line.626"></a>
+<span class="sourceLineNo">627</span>    long amount, Durability durability) throws IOException {<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    Increment increment = new Increment(row)<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        .addColumn(family, qualifier, amount)<a name="line.629"></a>
+<span class="sourceLineNo">630</span>        .setDurability(durability);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    Cell cell = increment(increment).getColumnLatestCell(family, qualifier);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  }<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>  /**<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * Releases any resources held or pending changes in internal buffers.<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   *<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @throws IOException if a remote or network exception occurs.<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  @Override<a name="line.640"></a>
+<span class="sourceLineNo">641</span>  default void close() throws IOException {<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    throw new NotImplementedException("Add an implementation!");<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Creates and returns a {@link com.google.protobuf.RpcChannel} instance connected to the<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * table region containing the specified row.  The row given does not actually have<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * to exist.  Whichever region would contain the row based on start and end keys will<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   * be used.  Note that the {@code row} parameter is also not passed to the<a name="line.649"></a>
+<span class="sourceLineNo">650</span>   * coprocessor handler registered for this protocol, unless the {@code row}<a name="line.650"></a>
+<span class="sourceLineNo">651</span>   * is separately passed as an argument in the service request.  The parameter<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * here is only used to locate the region used to handle the call.<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   *<a name="line.653"></a>
+<span class="sourceLineNo">654</span>   * &lt;p&gt;<a name="line.654"></a>
+<span class="sourceLineNo">655</span>   * The obtained {@link com.google.protobuf.RpcChannel} instance can be used to access a published<a name="line.655"></a>
+<span class="sourceLineNo">656</span>   * coprocessor {@link com.google.protobuf.Service} using standard protobuf service invocations:<a name="line.656"></a>
+<span class="sourceLineNo">657</span>   * &lt;/p&gt;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>   *<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * &lt;div style="background-color: #cccccc; padding: 2px"&gt;<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * &lt;blockquote&gt;&lt;pre&gt;<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * CoprocessorRpcChannel channel = myTable.coprocessorService(rowkey);<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * MyService.BlockingInterface service = MyService.newBlockingStub(channel);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   * MyCallRequest request = MyCallRequest.newBuilder()<a name="line.663"></a>
+<span class="sourceLineNo">664</span>   *     ...<a name="line.664"></a>
+<span class="sourceLineNo">665</span>   *     .build();<a name="line.665"></a>
+<span class="sourceLineNo">666</span>   * MyCallResponse response = service.myCall(null, request);<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   * &lt;/pre&gt;&lt;/blockquote&gt;&lt;/div&gt;<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   *<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * @param row The row key used to identify the remote region location<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * @return A CoprocessorRpcChannel instance<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   */<a name="line.671"></a>
+<span class="sourceLineNo">672</span>  default CoprocessorRpcChannel coprocessorService(byte[] row) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    throw new NotImplementedException("Add an implementation!");<a name="line.673"></a>
+<span class="sourceLineNo">674</span>  }<a name="line.674"></a>
+<span class="sourceLineNo">675</span><a name="line.675"></a>
+<span class="sourceLineNo">676</span>  /**<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and<a name="line.678"></a>
+<span class="sourceLineNo">679</span>   * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * with each {@link com.google.protobuf.Service} instance.<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   *<a name="line.681"></a>
+<span class="sourceLineNo">682</span>   * @param service the protocol buffer {@code Service} implementation to call<a name="line.682"></a>
+<span class="sourceLineNo">683</span>   * @param startKey start region selection with region containing this row.  If {@code null}, the<a name="line.683"></a>
+<span class="sourceLineNo">684</span>   *   selection will start with the first table region.<a name="line.684"></a>
+<span class="sourceLineNo">685</span>   * @param endKey select regions up to and including the region containing this row. If<a name="line.685"></a>
+<span class="sourceLineNo">686</span>   *   {@code null}, selection will continue through the last table region.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * @param callable this instance's<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   *   {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   *   method will be invoked once per table region, using the {@link com.google.protobuf.Service}<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   *   instance connected to that region.<a name="line.690"></a>
+<span class="sourceLineNo">691</span>   * @param &lt;T&gt; the {@link com.google.protobuf.Service} subclass to connect to<a name="line.691"></a>
+<span class="sourceLineNo">692</span>   * @param &lt;R&gt; Return type for the {@code callable} parameter's {@link<a name="line.692"></a>
+<span class="sourceLineNo">693</span>   * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.693"></a>
+<span class="sourceLineNo">694</span>   * @return a map of result values keyed by region name<a name="line.694"></a>
+<span class="sourceLineNo">695</span>   */<a name="line.695"></a>
+<span class="sourceLineNo">696</span>  default &lt;T extends Service, R&gt; Map&lt;byte[],R&gt; coprocessorService(final Class&lt;T&gt; service,<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    byte[] startKey, byte[] endKey, final Batch.Call&lt;T,R&gt; callable)<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    throws ServiceException, Throwable {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    throw new NotImplementedException("Add an implementation!");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>  }<a name="line.700"></a>
+<span class="sourceLineNo">701</span><a name="line.701"></a>
+<span class="sourceLineNo">702</span>  /**<a name="line.702"></a>
+<span class="sourceLineNo">703</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.703"></a>
+<span class="sourceLineNo">704</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and<a name="line.704"></a>
+<span class="sourceLineNo">705</span>   * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.705"></a>
+<span class="sourceLineNo">706</span>   * with each {@link Service} instance.<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   *<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * &lt;p&gt; The given<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}<a name="line.709"></a>
+<span class="sourceLineNo">710</span>   * method will be called with the return value from each region's<a name="line.710"></a>
+<span class="sourceLineNo">711</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} invocation. &lt;/p&gt;<a name="line.711"></a>
+<span class="sourceLineNo">712</span>   *<a name="line.712"></a>
+<span class="sourceLineNo">713</span>   * @param service the protocol buffer {@code Service} implementation to call<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * @param startKey start region selection with region containing this row.  If {@code null}, the<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   *   selection will start with the first table region.<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @param endKey select regions up to and including the region containing this row. If<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   *   {@code null}, selection will continue through the last table region.<a name="line.717"></a>
+<span class="sourceLineNo">718</span>   * @param callable this instance's<a name="line.718"></a>
+<span class="sourceLineNo">719</span>   *   {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}<a name="line.719"></a>
+<span class="sourceLineNo">720</span>   *   method will be invoked once per table region, using the {@link Service} instance connected to<a name="line.720"></a>
+<span class="sourceLineNo">721</span>   *   that region.<a name="line.721"></a>
+<span class="sourceLineNo">722</span>   * @param &lt;T&gt; the {@link Service} subclass to connect to<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * @param &lt;R&gt; Return type for the {@code callable} parameter's {@link<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   */<a name="line.725"></a>
+<span class="sourceLineNo">726</span>  default &lt;T extends Service, R&gt; void coprocessorService(final Class&lt;T&gt; service,<a name="line.726"></a>
+<span class="sourceLineNo">727</span>    byte[] startKey, byte[] endKey, final Batch.Call&lt;T,R&gt; callable,<a name="line.727"></a>
+<span class="sourceLineNo">728</span>    final Batch.Callback&lt;R&gt; callback) throws ServiceException, Throwable {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    throw new NotImplementedException("Add an implementation!");<a name="line.729"></a>
+<span class="sourceLineNo">730</span>  }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>  /**<a name="line.732"></a>
+<span class="sourceLineNo">733</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.733"></a>
+<span class="sourceLineNo">734</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all<a name="line.734"></a>
+<span class="sourceLineNo">735</span>   * the invocations to the same region server will be batched into one call. The coprocessor<a name="line.735"></a>
+<span class="sourceLineNo">736</span>   * service is invoked according to the service instance, method name and parameters.<a name="line.736"></a>
+<span class="sourceLineNo">737</span>   *<a name="line.737"></a>
+<span class="sourceLineNo">738</span>   * @param methodDescriptor<a name="line.738"></a>
+<span class="sourceLineNo">739</span>   *          the descriptor for the protobuf service method to call.<a name="line.739"></a>
+<span class="sourceLineNo">740</span>   * @param request<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   *          the method call parameters<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * @param startKey<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   *          start region selection with region containing this row. If {@code null}, the<a name="line.743"></a>
+<span class="sourceLineNo">744</span>   *          selection will start with the first table region.<a name="line.744"></a>
+<span class="sourceLineNo">745</span>   * @param endKey<a name="line.745"></a>
+<span class="sourceLineNo">746</span>   *          select regions up to and including the region containing this row. If {@code null},<a name="line.746"></a>
+<span class="sourceLineNo">747</span>   *          selection will continue through the last table region.<a name="line.747"></a>
+<span class="sourceLineNo">748</span>   * @param responsePrototype<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   *          the proto type of the response of the method in Service.<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * @param &lt;R&gt;<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   *          the response type for the coprocessor Service method<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return a map of result values keyed by region name<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  default &lt;R extends Message&gt; Map&lt;byte[], R&gt; batchCoprocessorService(<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    Descriptors.MethodDescriptor methodDescriptor, Message request,<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    byte[] startKey, byte[] endKey, R responsePrototype) throws ServiceException, Throwable {<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    throw new NotImplementedException("Add an implementation!");<a name="line.757"></a>
+<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
+<span class="sourceLineNo">759</span><a name="line.759"></a>
+<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   * the invocations to the same region server will be batched into one call. The coprocessor<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * service is invoked according to the service instance, method name and parameters.<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   *<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * &lt;p&gt;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * The given<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}<a name="line.768"></a>
+<span class="sourceLineNo">769</span>   * method will be called with the return value from each region's invocation.<a name="line.769"></a>
+<span class="sourceLineNo">770</span>   * &lt;/p&gt;<a name="line.770"></a>
+<span class="sourceLineNo">771</span>   *<a name="line.771"></a>
+<span class="sourceLineNo">772</span>   * @param methodDescriptor the descriptor for the protobuf service method to call.<a name="line.772"></a>
+<span class="sourceLineNo">773</span>   * @param request the method call parameters<a name="line.773"></a>
+<span class="sourceLineNo">774</span>   * @param startKey start region selection with region containing this row.<a name="line.774"></a>
+<span class="sourceLineNo">775</span>   *   If {@code null}, the selection will start with the first table region.<a name="line.775"></a>
+<span class="sourceLineNo">776</span>   * @param endKey select regions up to and including the region containing this row.<a name="line.776"></a>
+<span class="sourceLineNo">777</span>   *   If {@code null}, selection will continue through the last table region.<a name="line.777"></a>
+<span class="sourceLineNo">778</span>   * @param responsePrototype the proto type of the response of the method in Service.<a name="line.778"></a>
+<span class="sourceLineNo">779</span>   * @param callback callback to invoke with the response for each region<a name="line.779"></a>
+<span class="sourceLineNo">780</span>   * @param &lt;R&gt;<a name="line.780"></a>
+<span class="sourceLineNo">781</span>   *          the response type for the coprocessor Service method<a name="line.781"></a>
+<span class="sourceLineNo">782</span>   */<a name="line.782"></a>
+<span class="sourceLineNo">783</span>  default &lt;R extends Message&gt; void batchCoprocessorService(<a name="line.783"></a>
+<span class="sourceLineNo">784</span>      Descriptors.MethodDescriptor methodDescriptor, Message request, byte[] startKey,<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      byte[] endKey, R responsePrototype, Batch.Callback&lt;R&gt; callback)<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      throws ServiceException, Throwable {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    throw new NotImplementedException("Add an implementation!");<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  }<a name="line.788"></a>
+<span class="sourceLineNo">789</span><a name="line.789"></a>
+<span class="sourceLineNo">790</span>  /**<a name="line.790"></a>
+<span class="sourceLineNo">791</span>   * Atomically checks if a row/family/qualifier value matches the expected value.<a name="line.791"></a>
+<span class="sourceLineNo">792</span>   * If it does, it performs the row mutations.  If the passed value is null, the check<a name="line.792"></a>
+<span class="sourceLineNo">793</span>   * is for the lack of column (ie: non-existence)<a name="line.793"></a>
+<span class="sourceLineNo">794</span>   *<a name="line.794"></a>
+<span class="sourceLineNo">795</span>   * The expected value argument of this call is on the left and the current<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * value of the cell is on the right side of the comparison operator.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   *<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   * Ie. eg. GREATER operator means expected value &gt; existing &lt;=&gt; perform row mutations.<a name="line.798"></a>
+<span class="sourceLineNo">799</span>   *<a name="line.799"></a>
+<span class="sourceLineNo">800</span>   * @param row to check<a name="line.800"></a>
+<span class="sourceLineNo">801</span>   * @param family column family to check<a name="line.801"></a>
+<span class="sourceLineNo">802</span>   * @param qualifier column qualifier to check<a name="line.802"></a>
+<span class="sourceLineNo">803</span>   * @param compareOp the comparison operator<a name="line.803"></a>
+<span class="sourceLineNo">804</span>   * @param value the expected value<a name="line.804"></a>
+<span class="sourceLineNo">805</span>   * @param mutation  mutations to perform if check succeeds<a name="line.805"></a>
+<span class="sourceLineNo">806</span>   * @throws IOException e<a name="line.806"></a>
+<span class="sourceLineNo">807</span>   * @return true if the new put was executed, false otherwise<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @deprecated Since 2.0.0. Will be removed in 3.0.0. Use {@link #checkAndMutate(byte[], byte[])}<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   */<a name="line.809"></a>
+<span class="sourceLineNo">810</span>  @Deprecated<a name="line.810"></a>
+<span class="sourceLineNo">811</span>  default boolean checkAndMutate(byte[] row, byte[] family, byte[] qualifier,<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      CompareFilter.CompareOp compareOp, byte[] value, RowMutations mutation) throws IOException {<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    throw new NotImplementedException("Add an implementation!");<a name="line.813"></a>
+<span class="sourceLineNo">814</span>  }<a name="line.814"></a>
+<span class="sourceLineNo">815</span><a name="line.815"></a>
+<span class="sourceLineNo">816</span>  /**<a name="line.816"></a>
+<span class="sourceLineNo">817</span>   * Atomically checks if a row/family/qualifier value matches the expected value.<a name="line.817"></a>
+<span class="sourceLineNo">818</span>   * If it does, it performs the row mutations.  If the passed value is null, the check<a name="line.818"></a>
+<span class="sourceLineNo">819</span>   * is for the lack of column (ie: non-existence)<a name="line.819"></a>
+<span class="sourceLineNo">820</span>   *<a name="line.820"></a>
+<span class="sourceLineNo">821</span>   * The expected value argument of this call is on the left and the current<a name="line.821"></a>
+<span class="sourceLineNo">822</span>   * value of the cell is on the right side of the comparison operator.<a name="line.822"></a>
+<span class="sourceLineNo">823</span>   *<a name="line.823"></a>
+<span class="sourceLineNo">824</span>   * Ie. eg. GREATER operator means expected value &gt; existing &lt;=&gt; perform row mutations.<a name="line.824"></a>
+<span class="sourceLineNo">825</span>   *<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * @param row to check<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * @param family column family to check<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * @param qualifier column qualifier to check<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * @param op the comparison operator<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * @param value the expected value<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * @param mutation  mutations to perform if check succeeds<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   * @throws IOException e<a name="line.832"></a>
+<span class="sourceLineNo">833</span>   * @return true if the new put was executed, false otherwise<a name="line.833"></a>
+<span class="sourceLineNo">834</span>   * @deprecated Since 2.0.0. Will be removed in 3.0.0. Use {@link #checkAndMutate(byte[], byte[])}<a name="line.834"></a>
+<span class="sourceLineNo">835</span>   */<a name="line.835"></a>
+<span class="sourceLineNo">836</span>  @Deprecated<a name="line.836"></a>
+<span class="sourceLineNo">837</span>  default boolean checkAndMutate(byte[] row, byte[] family, byte[] qualifier, CompareOperator op,<a name="line.837"></a>
+<span class="sourceLineNo">838</span>                         byte[] value, RowMutations mutation) throws IOException {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    throw new NotImplementedException("Add an implementation!");<a name="line.839"></a>
+<span class="sourceLineNo">840</span>  }<a name="line.840"></a>
+<span class="sourceLineNo">841</span><a name="line.841"></a>
+<span class="sourceLineNo">842</span>  /**<a name="line.842"></a>
+<span class="sourceLineNo">843</span>   * Get timeout of each rpc request in this Table instance. It will be overridden by a more<a name="line.843"></a>
+<span class="sourceLineNo">844</span>   * specific rpc timeout config such as readRpcTimeout or writeRpcTimeout.<a name="line.844"></a>
+<span class="sourceLineNo">845</span>   * @see #getReadRpcTimeout(TimeUnit)<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * @see #getWriteRpcTimeout(TimeUnit)<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   * @param unit the unit of time the timeout to be represented in<a name="line.847"></a>
+<span class="sourceLineNo">848</span>   * @return rpc timeout in the specified time unit<a name="line.848"></a>
+<span class="sourceLineNo">849</span>   */<a name="line.849"></a>
+<span class="sourceLineNo">850</span>  default long getRpcTimeout(TimeUnit unit) {<a name="line.850"></a>
+<span class="sourceLineNo">851</span>    throw new NotImplementedException("Add an implementation!");<a name="line.851"></a>
+<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
+<span class="sourceLineNo">853</span><a name="line.853"></a>
+<span class="sourceLineNo">854</span>  /**<a name="line.854"></a>
+<span class="sourceLineNo">855</span>   * Get timeout (millisecond) of each rpc request in this Table instance.<a name="line.855"></a>
+<span class="sourceLineNo">856</span>   *<a name="line.856"></a>
+<span class="sourceLineNo">857</span>   * @return Currently configured read timeout<a name="line.857"></a>
+<span class="sourceLineNo">858</span>   * @deprecated use {@link #getReadRpcTimeout(TimeUnit)} or<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   *             {@link #getWriteRpcTimeout(TimeUnit)} instead<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   */<a name="line.860"></a>
+<span class="sourceLineNo">861</span>  @Deprecated<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  default int getRpcTimeout() {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>    return (int)getRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.863"></a>
+<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
+<span class="sourceLineNo">865</span><a name="line.865"></a>
+<span class="sourceLineNo">866</span>  /**<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * Set timeout (millisecond) of each rpc request in operations of this Table instance, will<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * override the value of hbase.rpc.timeout in configuration.<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   * If a rpc request waiting too long, it will stop waiting and send a new request to retry until<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   * retries exhausted or operation timeout reached.<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * &lt;p&gt;<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * NOTE: This will set both the read and write timeout settings to the provided value.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   *<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * @param rpcTimeout the timeout of each rpc request in millisecond.<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   *<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @deprecated Use setReadRpcTimeout or setWriteRpcTimeout instead<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   */<a name="line.877"></a>
+<span class="sourceLineNo">878</span>  @Deprecated<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  default void setRpcTimeout(int rpcTimeout) {<a name="line.879"></a>
+<span class="sourceLineNo">880</span>    setReadRpcTimeout(rpcTimeout);<a name="line.880"></a>
+<span class="sourceLineNo">881</span>    setWriteRpcTimeout(rpcTimeout);<a name="line.881"></a>
+<span class="sourceLineNo">882</span>  }<a name="line.882"></a>
+<span class="sourceLineNo">883</span><a name="line.883"></a>
+<span class="sourceLineNo">884</span>  /**<a name="line.884"></a>
+<span class="sourceLineNo">885</span>   * Get timeout of each rpc read request in this Table instance.<a name="line.885"></a>
+<span class="sourceLineNo">886</span>   * @param unit the unit of time the timeout to be represented in<a name="line.886"></a>
+<span class="sourceLineNo">887</span>   * @return read rpc timeout in the specified time unit<a name="line.887"></a>
+<span class="sourceLineNo">888</span>   */<a name="line.888"></a>
+<span class="sourceLineNo">889</span>  default long getReadRpcTimeout(TimeUnit unit) {<a name="line.889"></a>
+<span class="sourceLineNo">890</span>    throw new NotImplementedException("Add an implementation!");<a name="line.890"></a>
+<span class="sourceLineNo">891</span>  }<a name="line.891"></a>
+<span class="sourceLineNo">892</span><a name="line.892"></a>
+<span class="sourceLineNo">893</span>  /**<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   * Get timeout (millisecond) of each rpc read request in this Table instance.<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.895"></a>
+<span class="sourceLineNo">896</span>   *             use {@link #getReadRpcTimeout(TimeUnit)} instead<a name="line.896"></a>
+<span class="sourceLineNo">897</span>   */<a name="line.897"></a>
+<span class="sourceLineNo">898</span>  @Deprecated<a name="line.898"></a>
+<span class="sourceLineNo">899</span>  default int getReadRpcTimeout() {<a name="line.899"></a>
+<span class="sourceLineNo">900</span>    return (int)getReadRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.900"></a>
+<span class="sourceLineNo">901</span>  }<a name="line.901"></a>
+<span class="sourceLineNo">902</span><a name="line.902"></a>
+<span class="sourceLineNo">903</span>  /**<a name="line.903"></a>
+<span class="sourceLineNo">904</span>   * Set timeout (millisecond) of each rpc read request in operations of this Table instance, will<a name="line.904"></a>
+<span class="sourceLineNo">905</span>   * override the value of hbase.rpc.read.timeout in configuration.<a name="line.905"></a>
+<span class="sourceLineNo">906</span>   * If a rpc read request waiting too long, it will stop waiting and send a new request to retry<a name="line.906"></a>
+<span class="sourceLineNo">907</span>   * until retries exhausted or operation timeout reached.<a name="line.907"></a>
+<span class="sourceLineNo">908</span>   *<a name="line.908"></a>
+<span class="sourceLineNo">909</span>   * @param readRpcTimeout the timeout for read rpc request in milliseconds<a name="line.909"></a>
+<span class="sourceLineNo">910</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setReadRpcTimeout} instead<a name="line.910"></a>
+<span class="sourceLineNo">911</span>   */<a name="line.911"></a>
+<span class="sourceLineNo">912</span>  @Deprecated<a name="line.912"></a>
+<span class="sourceLineNo">913</span>  default void setReadRpcTimeout(int readRpcTimeout) {<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    throw new NotImplementedException("Add an implementation!");<a name="line.914"></a>
+<span class="sourceLineNo">915</span>  }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span>  /**<a name="line.917"></a>
+<span class="sourceLineNo">918</span>   * Get timeout of each rpc write request in this Table instance.<a name="line.918"></a>
+<span class="sourceLineNo">919</span>   * @param unit the unit of time the timeout to be represented in<a name="line.919"></a>
+<span class="sourceLineNo">920</span>   * @return write rpc timeout in the specified time unit<a name="line.920"></a>
+<span class="sourceLineNo">921</span>   */<a name="line.921"></a>
+<span class="sourceLineNo">922</span>  default long getWriteRpcTimeout(TimeUnit unit) {<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    throw new NotImplementedException("Add an implementation!");<a name="line.923"></a>
+<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
+<span class="sourceLineNo">925</span><a name="line.925"></a>
+<span class="sourceLineNo">926</span>  /**<a name="line.926"></a>
+<span class="sourceLineNo">927</span>   * Get timeout (millisecond) of each rpc write request in this Table instance.<a name="line.927"></a>
+<span class="sourceLineNo">928</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.928"></a>
+<span class="sourceLineNo">929</span>   *             use {@link #getWriteRpcTimeout(TimeUnit)} instead<a name="line.929"></a>
+<span class="sourceLineNo">930</span>   */<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  @Deprecated<a name="line.931"></a>
+<span class="sourceLineNo">932</span>  default int getWriteRpcTimeout() {<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    return (int)getWriteRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.933"></a>
+<span class="sourceLineNo">934</span>  }<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span>  /**<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   * Set timeout (millisecond) of each rpc write request in operations of this Table instance, will<a name="line.937"></a>
+<span class="sourceLineNo">938</span>   * override the value of hbase.rpc.write.timeout in configuration.<a name="line.938"></a>
+<span class="sourceLineNo">939</span>   * If a rpc write request waiting too long, it will stop waiting and send a new request to retry<a name="line.939"></a>
+<span class="sourceLineNo">940</span>   * until retries exhausted or operation timeout reached.<a name="line.940"></a>
+<span class="sourceLineNo">941</span>   *<a name="line.941"></a>
+<span class="sourceLineNo">942</span>   * @param writeRpcTimeout the timeout for write rpc request in milliseconds<a name="line.942"></a>
+<span class="sourceLineNo">943</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setWriteRpcTimeout} instead<a name="line.943"></a>
+<span class="sourceLineNo">944</span>   */<a name="line.944"></a>
+<span class="sourceLineNo">945</span>  @Deprecated<a name="line.945"></a>
+<span class="sourceLineNo">946</span>  default void setWriteRpcTimeout(int writeRpcTimeout) {<a name="line.946"></a>
+<span class="sourceLineNo">947</span>    throw new NotImplementedException("Add an implementation!");<a name="line.947"></a>
+<span class="sourceLineNo">948</span>  }<a name="line.948"></a>
+<span class="sourceLineNo">949</span><a name="line.949"></a>
+<span class="sourceLineNo">950</span>  /**<a name="line.950"></a>
+<span class="sourceLineNo">951</span>   * Get timeout of each operation in Table instance.<a name="line.951"></a>
+<span class="sourceLineNo">952</span>   * @param unit the unit of time the timeout to be represented in<a name="line.952"></a>
+<span class="sourceLineNo">953</span>   * @return operation rpc timeout in the specified time unit<a name="line.953"></a>
+<span class="sourceLineNo">954</span>   */<a name="line.954"></a>
+<span class="sourceLineNo">955</span>  default long getOperationTimeout(TimeUnit unit) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span>    throw new NotImplementedException("Add an implementation!");<a name="line.956"></a>
+<span class="sourceLineNo">957</span>  }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span>  /**<a name="line.959"></a>
+<span class="sourceLineNo">960</span>   * Get timeout (millisecond) of each operation for in Table instance.<a name="line.960"></a>
+<span class="sourceLineNo">961</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.961"></a>
+<span class="sourceLineNo">962</span>   *             use {@link #getOperationTimeout(TimeUnit)} instead<a name="line.962"></a>
+<span class="sourceLineNo">963</span>   */<a name="line.963"></a>
+<span class="sourceLineNo">964

<TRUNCATED>

[20/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.IncrementTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"

<TRUNCATED>

[41/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index f70154f..d42b6e0 100644
--- a/book.html
+++ b/book.html
@@ -41151,7 +41151,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-08-26 14:29:57 UTC
+Last updated 2018-08-27 14:29:53 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 2286244..33fa69f 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -306,7 +306,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 7a01cb6..4d75f1f 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -9828,12 +9828,12 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>763</td>
+<td>764</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3606</td>
+<td>3605</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td>misc</td>
@@ -16882,73 +16882,73 @@
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
-<td>2224</td></tr>
+<td>2228</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
-<td>2266</td></tr>
+<td>2270</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2381</td></tr>
+<td>2385</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2382</td></tr>
+<td>2386</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>2414</td></tr>
+<td>2418</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
-<td>2467</td></tr>
+<td>2471</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
-<td>2481</td></tr>
+<td>2485</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 118).</td>
-<td>2485</td></tr>
+<td>2489</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 116).</td>
-<td>2489</td></tr>
+<td>2493</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 305 lines (max allowed is 150).</td>
-<td>2518</td></tr>
+<td>2522</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2684</td></tr>
+<td>2688</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
-<td>2713</td></tr></table></div>
+<td>2717</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.PerformanceEvaluationCommons.java">org/apache/hadoop/hbase/PerformanceEvaluationCommons.java</h3>
 <table border="0" class="table table-striped">
@@ -19469,7 +19469,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 0 has parse error. Details: no viable alternative at input '   *' while parsing JAVADOC_TAG</td>
 <td>117</td></tr>
 <tr class="b">
@@ -28366,13 +28366,13 @@
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>599</td></tr>
+<td>598</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>622</td></tr></table></div>
+<td>621</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TableDescriptor.java">org/apache/hadoop/hbase/client/TableDescriptor.java</h3>
 <table border="0" class="table table-striped">
@@ -119111,7 +119111,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 1e138c8..f2ceafe 100644
--- a/coc.html
+++ b/coc.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -375,7 +375,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 5bf4f44..bfde090 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -440,7 +440,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 0a239e8..d2340bb 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -890,7 +890,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index b56d725..77a4fa9 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -313,7 +313,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 60c5465..f58ca6b 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -1005,7 +1005,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 1d14a04..d4fae30 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3817,21 +3817,21 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Sun Aug 26 14:38:46 UTC 2018"</code></td>
+<td class="colLast"><code>"Mon Aug 27 14:38:42 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"f05f116327c1f0dc8479ce238b3a47454dfea13c"</code></td>
+<td class="colLast"><code>"993e74b7471a7fe483eae59ab198bb2533c55031"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"02224f341974eff12f107b5eb498792d"</code></td>
+<td class="colLast"><code>"2f075d7eb0054e5de25bb410de643014"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/devapidocs/org/apache/hadoop/hbase/client/HTable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/HTable.html b/devapidocs/org/apache/hadoop/hbase/client/HTable.html
index 3baa654..ffeb8ec 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/HTable.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/HTable.html
@@ -1570,8 +1570,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.htm
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Table.html#append-org.apache.hadoop.hbase.client.Append-">append</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a></code></dd>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>append</code> - object that specifies the columns and amounts to be used
-                  for the increment operations</dd>
+<dd><code>append</code> - object that specifies the columns and values to be appended</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>values of columns after the append operation (maybe null)</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/devapidocs/org/apache/hadoop/hbase/client/Table.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Table.html b/devapidocs/org/apache/hadoop/hbase/client/Table.html
index d5aeb29..713531a 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Table.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Table.html
@@ -1257,7 +1257,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>default&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.571">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append)
+<pre>default&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.570">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Appends values to one or more columns within a single row.
  <p>
@@ -1266,8 +1266,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
  readers are guaranteed to see this operation fully completed.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>append</code> - object that specifies the columns and amounts to be used
-                  for the increment operations</dd>
+<dd><code>append</code> - object that specifies the columns and values to be appended</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>values of columns after the append operation (maybe null)</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1281,7 +1280,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>increment</h4>
-<pre>default&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.587">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment)
+<pre>default&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.586">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Increments one or more columns within a single row.
  <p>
@@ -1305,7 +1304,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementColumnValue</h4>
-<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.603">incrementColumnValue</a>(byte[]&nbsp;row,
+<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.602">incrementColumnValue</a>(byte[]&nbsp;row,
                                   byte[]&nbsp;family,
                                   byte[]&nbsp;qualifier,
                                   long&nbsp;amount)
@@ -1333,7 +1332,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementColumnValue</h4>
-<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.627">incrementColumnValue</a>(byte[]&nbsp;row,
+<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.626">incrementColumnValue</a>(byte[]&nbsp;row,
                                   byte[]&nbsp;family,
                                   byte[]&nbsp;qualifier,
                                   long&nbsp;amount,
@@ -1367,7 +1366,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.642">close</a>()
+<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.641">close</a>()
             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Releases any resources held or pending changes in internal buffers.</div>
 <dl>
@@ -1386,7 +1385,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorService</h4>
-<pre>default&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.html" title="interface in org.apache.hadoop.hbase.ipc">CoprocessorRpcChannel</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.673">coprocessorService</a>(byte[]&nbsp;row)</pre>
+<pre>default&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.html" title="interface in org.apache.hadoop.hbase.ipc">CoprocessorRpcChannel</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.672">coprocessorService</a>(byte[]&nbsp;row)</pre>
 <div class="block">Creates and returns a <code>RpcChannel</code> instance connected to the
  table region containing the specified row.  The row given does not actually have
  to exist.  Whichever region would contain the row based on start and end keys will
@@ -1423,7 +1422,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorService</h4>
-<pre>default&nbsp;&lt;T extends com.google.protobuf.Service,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.697">coprocessorService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;service,
+<pre>default&nbsp;&lt;T extends com.google.protobuf.Service,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.696">coprocessorService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;service,
                                                                                    byte[]&nbsp;startKey,
                                                                                    byte[]&nbsp;endKey,
                                                                                    <a href="../../../../../org/apache/hadoop/hbase/client/coprocessor/Batch.Call.html" title="interface in org.apache.hadoop.hbase.client.coprocessor">Batch.Call</a>&lt;T,R&gt;&nbsp;callable)
@@ -1461,7 +1460,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorService</h4>
-<pre>default&nbsp;&lt;T extends com.google.protobuf.Service,R&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.727">coprocessorService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;service,
+<pre>default&nbsp;&lt;T extends com.google.protobuf.Service,R&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.726">coprocessorService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;service,
                                                                           byte[]&nbsp;startKey,
                                                                           byte[]&nbsp;endKey,
                                                                           <a href="../../../../../org/apache/hadoop/hbase/client/coprocessor/Batch.Call.html" title="interface in org.apache.hadoop.hbase.client.coprocessor">Batch.Call</a>&lt;T,R&gt;&nbsp;callable,
@@ -1505,7 +1504,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>batchCoprocessorService</h4>
-<pre>default&nbsp;&lt;R extends com.google.protobuf.Message&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.755">batchCoprocessorService</a>(com.google.protobuf.Descriptors.MethodDescriptor&nbsp;methodDescriptor,
+<pre>default&nbsp;&lt;R extends com.google.protobuf.Message&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.754">batchCoprocessorService</a>(com.google.protobuf.Descriptors.MethodDescriptor&nbsp;methodDescriptor,
                                                                                       com.google.protobuf.Message&nbsp;request,
                                                                                       byte[]&nbsp;startKey,
                                                                                       byte[]&nbsp;endKey,
@@ -1543,7 +1542,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>batchCoprocessorService</h4>
-<pre>default&nbsp;&lt;R extends com.google.protobuf.Message&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.784">batchCoprocessorService</a>(com.google.protobuf.Descriptors.MethodDescriptor&nbsp;methodDescriptor,
+<pre>default&nbsp;&lt;R extends com.google.protobuf.Message&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.783">batchCoprocessorService</a>(com.google.protobuf.Descriptors.MethodDescriptor&nbsp;methodDescriptor,
                                                                              com.google.protobuf.Message&nbsp;request,
                                                                              byte[]&nbsp;startKey,
                                                                              byte[]&nbsp;endKey,
@@ -1586,7 +1585,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <li class="blockList">
 <h4>checkAndMutate</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.812">checkAndMutate</a>(byte[]&nbsp;row,
+default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.811">checkAndMutate</a>(byte[]&nbsp;row,
                                            byte[]&nbsp;family,
                                            byte[]&nbsp;qualifier,
                                            <a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter">CompareFilter.CompareOp</a>&nbsp;compareOp,
@@ -1624,7 +1623,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <li class="blockList">
 <h4>checkAndMutate</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.838">checkAndMutate</a>(byte[]&nbsp;row,
+default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.837">checkAndMutate</a>(byte[]&nbsp;row,
                                            byte[]&nbsp;family,
                                            byte[]&nbsp;qualifier,
                                            <a href="../../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase">CompareOperator</a>&nbsp;op,
@@ -1661,7 +1660,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcTimeout</h4>
-<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.851">getRpcTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
+<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.850">getRpcTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
 <div class="block">Get timeout of each rpc request in this Table instance. It will be overridden by a more
  specific rpc timeout config such as readRpcTimeout or writeRpcTimeout.</div>
 <dl>
@@ -1682,7 +1681,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <li class="blockList">
 <h4>getRpcTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.863">getRpcTimeout</a>()</pre>
+default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.862">getRpcTimeout</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">use <a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getReadRpcTimeout-java.util.concurrent.TimeUnit-"><code>getReadRpcTimeout(TimeUnit)</code></a> or
              <a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getWriteRpcTimeout-java.util.concurrent.TimeUnit-"><code>getWriteRpcTimeout(TimeUnit)</code></a> instead</span></div>
 <div class="block">Get timeout (millisecond) of each rpc request in this Table instance.</div>
@@ -1699,7 +1698,7 @@ default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/c
 <li class="blockList">
 <h4>setRpcTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.880">setRpcTimeout</a>(int&nbsp;rpcTimeout)</pre>
+default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.879">setRpcTimeout</a>(int&nbsp;rpcTimeout)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Use setReadRpcTimeout or setWriteRpcTimeout instead</span></div>
 <div class="block">Set timeout (millisecond) of each rpc request in operations of this Table instance, will
  override the value of hbase.rpc.timeout in configuration.
@@ -1719,7 +1718,7 @@ default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <ul class="blockList">
 <li class="blockList">
 <h4>getReadRpcTimeout</h4>
-<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.890">getReadRpcTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
+<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.889">getReadRpcTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
 <div class="block">Get timeout of each rpc read request in this Table instance.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1736,7 +1735,7 @@ default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <li class="blockList">
 <h4>getReadRpcTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.900">getReadRpcTimeout</a>()</pre>
+default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.899">getReadRpcTimeout</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0 and will be removed in 3.0 version
              use <a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getReadRpcTimeout-java.util.concurrent.TimeUnit-"><code>getReadRpcTimeout(TimeUnit)</code></a> instead</span></div>
 <div class="block">Get timeout (millisecond) of each rpc read request in this Table instance.</div>
@@ -1749,7 +1748,7 @@ default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/c
 <li class="blockList">
 <h4>setReadRpcTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.914">setReadRpcTimeout</a>(int&nbsp;readRpcTimeout)</pre>
+default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.913">setReadRpcTimeout</a>(int&nbsp;readRpcTimeout)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0, use <a href="../../../../../org/apache/hadoop/hbase/client/TableBuilder.html#setReadRpcTimeout-int-"><code>TableBuilder.setReadRpcTimeout(int)</code></a> instead</span></div>
 <div class="block">Set timeout (millisecond) of each rpc read request in operations of this Table instance, will
  override the value of hbase.rpc.read.timeout in configuration.
@@ -1767,7 +1766,7 @@ default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriteRpcTimeout</h4>
-<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.923">getWriteRpcTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
+<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.922">getWriteRpcTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
 <div class="block">Get timeout of each rpc write request in this Table instance.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1784,7 +1783,7 @@ default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <li class="blockList">
 <h4>getWriteRpcTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.933">getWriteRpcTimeout</a>()</pre>
+default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.932">getWriteRpcTimeout</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0 and will be removed in 3.0 version
              use <a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getWriteRpcTimeout-java.util.concurrent.TimeUnit-"><code>getWriteRpcTimeout(TimeUnit)</code></a> instead</span></div>
 <div class="block">Get timeout (millisecond) of each rpc write request in this Table instance.</div>
@@ -1797,7 +1796,7 @@ default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/c
 <li class="blockList">
 <h4>setWriteRpcTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.947">setWriteRpcTimeout</a>(int&nbsp;writeRpcTimeout)</pre>
+default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.946">setWriteRpcTimeout</a>(int&nbsp;writeRpcTimeout)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0, use <a href="../../../../../org/apache/hadoop/hbase/client/TableBuilder.html#setWriteRpcTimeout-int-"><code>TableBuilder.setWriteRpcTimeout(int)</code></a> instead</span></div>
 <div class="block">Set timeout (millisecond) of each rpc write request in operations of this Table instance, will
  override the value of hbase.rpc.write.timeout in configuration.
@@ -1815,7 +1814,7 @@ default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <ul class="blockList">
 <li class="blockList">
 <h4>getOperationTimeout</h4>
-<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.956">getOperationTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
+<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.955">getOperationTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
 <div class="block">Get timeout of each operation in Table instance.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1832,7 +1831,7 @@ default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <li class="blockList">
 <h4>getOperationTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.966">getOperationTimeout</a>()</pre>
+default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.965">getOperationTimeout</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0 and will be removed in 3.0 version
              use <a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getOperationTimeout-java.util.concurrent.TimeUnit-"><code>getOperationTimeout(TimeUnit)</code></a> instead</span></div>
 <div class="block">Get timeout (millisecond) of each operation for in Table instance.</div>
@@ -1845,7 +1844,7 @@ default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/c
 <li class="blockList">
 <h4>setOperationTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.982">setOperationTimeout</a>(int&nbsp;operationTimeout)</pre>
+default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.981">setOperationTimeout</a>(int&nbsp;operationTimeout)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0, use <a href="../../../../../org/apache/hadoop/hbase/client/TableBuilder.html#setOperationTimeout-int-"><code>TableBuilder.setOperationTimeout(int)</code></a> instead</span></div>
 <div class="block">Set timeout (millisecond) of each operation in this Table instance, will override the value
  of hbase.client.operation.timeout in configuration.

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/devapidocs/org/apache/hadoop/hbase/rest/client/RemoteHTable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/client/RemoteHTable.html b/devapidocs/org/apache/hadoop/hbase/rest/client/RemoteHTable.html
index 37b17cd..901ed6a 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/client/RemoteHTable.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/client/RemoteHTable.html
@@ -1684,8 +1684,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/h
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/client/Table.html#append-org.apache.hadoop.hbase.client.Append-">append</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a></code></dd>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>append</code> - object that specifies the columns and amounts to be used
-                  for the increment operations</dd>
+<dd><code>append</code> - object that specifies the columns and values to be appended</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>values of columns after the append operation (maybe null)</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index cf4852c..0688652 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span>  public static final String revision = "f05f116327c1f0dc8479ce238b3a47454dfea13c";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "993e74b7471a7fe483eae59ab198bb2533c55031";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Sun Aug 26 14:38:46 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Mon Aug 27 14:38:42 UTC 2018";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://jenkins-websites1.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "02224f341974eff12f107b5eb498792d";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "2f075d7eb0054e5de25bb410de643014";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


[07/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Status.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Status.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Status.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Status.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.Status.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"></a>
+<span class="sourceLineNo">2

<TRUNCATED>

[38/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 9714fd8..a8552e1 100644
--- a/downloads.html
+++ b/downloads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -423,7 +423,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index ded334e..793f8ef 100644
--- a/export_control.html
+++ b/export_control.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -331,7 +331,7 @@ for more details.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 7f2f6d7..1bf2722 100644
--- a/index.html
+++ b/index.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -411,7 +411,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 3534cc4..08000a6 100644
--- a/integration.html
+++ b/integration.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -291,7 +291,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 6dfbd32..62b64ee 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -288,7 +288,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index cd7f1fe..7a4f11f 100644
--- a/license.html
+++ b/license.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -491,7 +491,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 04b6cbe..a825b70 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -341,7 +341,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index fe1de63..6a00fab 100644
--- a/metrics.html
+++ b/metrics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -459,7 +459,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 75a8ed4..52ba910 100644
--- a/old_news.html
+++ b/old_news.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -440,7 +440,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index d1a3118..6b810fa 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -440,7 +440,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 0f00fcb..a39df7d 100644
--- a/plugins.html
+++ b/plugins.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -375,7 +375,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 8728aae..4fb95ed 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -769,7 +769,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index e6ea534..26a67af 100644
--- a/project-info.html
+++ b/project-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -335,7 +335,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index a4c1597..ad2b08c 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -305,7 +305,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 7ebb931..f753bde 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -331,7 +331,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 57f5754..9c27f3b 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -308,7 +308,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 53890ce..83fea9f 100644
--- a/replication.html
+++ b/replication.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -303,7 +303,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 37e1728..f7ffcbf 100644
--- a/resources.html
+++ b/resources.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -331,7 +331,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 085d6f3..53097c6 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -299,7 +299,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 49714f8..3c8d825 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -333,7 +333,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 545834f..d841146 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -520,7 +520,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index be67e7d..af067ce 100644
--- a/team-list.html
+++ b/team-list.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -748,7 +748,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html
index 057e358..eff9ddd 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html
@@ -295,7 +295,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockList">
 <li class="blockList">
 <h4>testRow</h4>
-<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#line.2218">testRow</a>(int&nbsp;i)
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#line.2222">testRow</a>(int&nbsp;i)
          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html#testRow-int-">PerformanceEvaluation.TestBase</a></code></span></div>
 <div class="block">Test for individual row.</div>
@@ -319,7 +319,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Table
 <ul class="blockListLast">
 <li class="blockList">
 <h4>constructScan</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.client.Scan&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#line.2236">constructScan</a>(byte[]&nbsp;valuePrefix)
+<pre>protected&nbsp;org.apache.hadoop.hbase.client.Scan&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html#line.2240">constructScan</a>(byte[]&nbsp;valuePrefix)
                                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.html b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.html
index e154455..9e3665f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/PerformanceEvaluation.html
@@ -1025,7 +1025,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>calculateMbps</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2266">calculateMbps</a>(int&nbsp;rows,
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2270">calculateMbps</a>(int&nbsp;rows,
                                     long&nbsp;timeMs,
                                     int&nbsp;valueSize,
                                     int&nbsp;families,
@@ -1046,7 +1046,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>format</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2281">format</a>(int&nbsp;number)</pre>
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2285">format</a>(int&nbsp;number)</pre>
 </li>
 </ul>
 <a name="generateData-java.util.Random-int-">
@@ -1055,7 +1055,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>generateData</h4>
-<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2297">generateData</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a>&nbsp;r,
+<pre>public static&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2301">generateData</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a>&nbsp;r,
                                   int&nbsp;length)</pre>
 </li>
 </ul>
@@ -1065,7 +1065,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getRandomRow</h4>
-<pre>static&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2319">getRandomRow</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a>&nbsp;random,
+<pre>static&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2323">getRandomRow</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a>&nbsp;random,
                            int&nbsp;totalRows)</pre>
 </li>
 </ul>
@@ -1075,7 +1075,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>generateRandomRow</h4>
-<pre>static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2323">generateRandomRow</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a>&nbsp;random,
+<pre>static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2327">generateRandomRow</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a>&nbsp;random,
                              int&nbsp;totalRows)</pre>
 </li>
 </ul>
@@ -1085,7 +1085,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>runOneClient</h4>
-<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RunResult.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.RunResult</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2327">runOneClient</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a>&gt;&nbsp;cmd,
+<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.RunResult.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.RunResult</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2331">runOneClient</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a>&gt;&nbsp;cmd,
                                                     org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                     org.apache.hadoop.hbase.client.Connection&nbsp;con,
                                                     org.apache.hadoop.hbase.client.AsyncConnection&nbsp;asyncCon,
@@ -1106,7 +1106,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getAverageValueLength</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2365">getAverageValueLength</a>(<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;opts)</pre>
+<pre>private static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2369">getAverageValueLength</a>(<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;opts)</pre>
 </li>
 </ul>
 <a name="runTest-java.lang.Class-org.apache.hadoop.hbase.PerformanceEvaluation.TestOptions-">
@@ -1115,7 +1115,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>runTest</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2369">runTest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a>&gt;&nbsp;cmd,
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2373">runTest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a>&gt;&nbsp;cmd,
                      <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;opts)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
@@ -1136,7 +1136,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>printUsage</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2391">printUsage</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2395">printUsage</a>()</pre>
 </li>
 </ul>
 <a name="printUsage-java.lang.String-">
@@ -1145,7 +1145,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>printUsage</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2395">printUsage</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2399">printUsage</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
 </li>
 </ul>
 <a name="printUsageAndExit-java.lang.String-int-">
@@ -1154,7 +1154,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>printUsageAndExit</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2399">printUsageAndExit</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2403">printUsageAndExit</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
                                         int&nbsp;exitCode)</pre>
 </li>
 </ul>
@@ -1164,7 +1164,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>printUsage</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2404">printUsage</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;shortName,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2408">printUsage</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;shortName,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
 </li>
 </ul>
@@ -1174,7 +1174,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>parseOpts</h4>
-<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2518">parseOpts</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;args)</pre>
+<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2522">parseOpts</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Queue.html?is-external=true" title="class or interface in java.util">Queue</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;args)</pre>
 <div class="block">Parse options passed in via an arguments array. Assumes that array has been split
  on white-space and placed into a <code>Queue</code>. Any unknown arguments will remain
  in the queue at the conclusion of this method call. It's up to the caller to deal
@@ -1187,7 +1187,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>calculateRowsAndSize</h4>
-<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2824">calculateRowsAndSize</a>(<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;opts)</pre>
+<pre>static&nbsp;<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2828">calculateRowsAndSize</a>(<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;opts)</pre>
 </li>
 </ul>
 <a name="getRowsPerGB-org.apache.hadoop.hbase.PerformanceEvaluation.TestOptions-">
@@ -1196,7 +1196,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowsPerGB</h4>
-<pre>static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2842">getRowsPerGB</a>(<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;opts)</pre>
+<pre>static&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2846">getRowsPerGB</a>(<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a>&nbsp;opts)</pre>
 </li>
 </ul>
 <a name="run-java.lang.String:A-">
@@ -1205,7 +1205,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2848">run</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2852">run</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1221,7 +1221,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>isCommandClass</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2893">isCommandClass</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;cmd)</pre>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2897">isCommandClass</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;cmd)</pre>
 </li>
 </ul>
 <a name="determineCommandClass-java.lang.String-">
@@ -1230,7 +1230,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>determineCommandClass</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2897">determineCommandClass</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;cmd)</pre>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.TestBase.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestBase</a>&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2901">determineCommandClass</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;cmd)</pre>
 </li>
 </ul>
 <a name="main-java.lang.String:A-">
@@ -1239,7 +1239,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2902">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html#line.2906">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html
index 5860322..6a26eef 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html
@@ -266,7 +266,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html#line.57">tearDown</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html#line.58">tearDown</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -280,7 +280,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>test</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html#line.62">test</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckReplication.html#line.63">test</a>()
           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>


[17/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange1000Test.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;prope

<TRUNCATED>

[36/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomReadTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;ncli

<TRUNCATED>

[15/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10Test.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&

<TRUNCATED>

[37/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AppendTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"></a>
+<span cl

<TRUNCATED>

[34/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncScanTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"

<TRUNCATED>

[10/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.ScanTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"></a>
+<span class="sourc

<TRUNCATED>

[21/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.FilteredScanTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a n

<TRUNCATED>

[08/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.SequentialWriteTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;ncli

<TRUNCATED>

[39/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/devapidocs/src-html/org/apache/hadoop/hbase/client/Table.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/Table.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/Table.html
index 192f920..fbdec56 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/Table.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/Table.html
@@ -571,426 +571,425 @@
 <span class="sourceLineNo">563</span>   * under a single row lock, so write operations to a row are synchronized, and<a name="line.563"></a>
 <span class="sourceLineNo">564</span>   * readers are guaranteed to see this operation fully completed.<a name="line.564"></a>
 <span class="sourceLineNo">565</span>   *<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   * @param append object that specifies the columns and amounts to be used<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   *                  for the increment operations<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   * @throws IOException e<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * @return values of columns after the append operation (maybe null)<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   */<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  default Result append(final Append append) throws IOException {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    throw new NotImplementedException("Add an implementation!");<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  }<a name="line.573"></a>
-<span class="sourceLineNo">574</span><a name="line.574"></a>
-<span class="sourceLineNo">575</span>  /**<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * Increments one or more columns within a single row.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   * &lt;p&gt;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * This operation ensures atomicity to readers. Increments are done<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * under a single row lock, so write operations to a row are synchronized, and<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   * readers are guaranteed to see this operation fully completed.<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   *<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   * @param increment object that specifies the columns and amounts to be used<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   *                  for the increment operations<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * @throws IOException e<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * @return values of columns after the increment<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  default Result increment(final Increment increment) throws IOException {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    throw new NotImplementedException("Add an implementation!");<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>  /**<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * See {@link #incrementColumnValue(byte[], byte[], byte[], long, Durability)}<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * &lt;p&gt;<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * The {@link Durability} is defaulted to {@link Durability#SYNC_WAL}.<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param row The row that contains the cell to increment.<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @param family The column family of the cell to increment.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @param qualifier The column qualifier of the cell to increment.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   * @param amount The amount to increment the cell with (or decrement, if the<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * amount is negative).<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * @return The new value, post increment.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   * @throws IOException if a remote or network exception occurs.<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
-<span class="sourceLineNo">603</span>  default long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier, long amount)<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      throws IOException {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    Increment increment = new Increment(row).addColumn(family, qualifier, amount);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    Cell cell = increment(increment).getColumnLatestCell(family, qualifier);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>  /**<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * Atomically increments a column value. If the column value already exists<a name="line.611"></a>
-<span class="sourceLineNo">612</span>   * and is not a big-endian long, this could throw an exception. If the column<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * value does not yet exist it is initialized to &lt;code&gt;amount&lt;/code&gt; and<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * written to the specified column.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   *<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * &lt;p&gt;Setting durability to {@link Durability#SKIP_WAL} means that in a fail<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * scenario you will lose any increments that have not been flushed.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * @param row The row that contains the cell to increment.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * @param family The column family of the cell to increment.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   * @param qualifier The column qualifier of the cell to increment.<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * @param amount The amount to increment the cell with (or decrement, if the<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * amount is negative).<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * @param durability The persistence guarantee for this increment.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @return The new value, post increment.<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * @throws IOException if a remote or network exception occurs.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   */<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  default long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier,<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    long amount, Durability durability) throws IOException {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    Increment increment = new Increment(row)<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        .addColumn(family, qualifier, amount)<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        .setDurability(durability);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    Cell cell = increment(increment).getColumnLatestCell(family, qualifier);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * Releases any resources held or pending changes in internal buffers.<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   *<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * @throws IOException if a remote or network exception occurs.<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   */<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  @Override<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  default void close() throws IOException {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    throw new NotImplementedException("Add an implementation!");<a name="line.643"></a>
-<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
-<span class="sourceLineNo">645</span><a name="line.645"></a>
-<span class="sourceLineNo">646</span>  /**<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * Creates and returns a {@link com.google.protobuf.RpcChannel} instance connected to the<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * table region containing the specified row.  The row given does not actually have<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * to exist.  Whichever region would contain the row based on start and end keys will<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * be used.  Note that the {@code row} parameter is also not passed to the<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   * coprocessor handler registered for this protocol, unless the {@code row}<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * is separately passed as an argument in the service request.  The parameter<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * here is only used to locate the region used to handle the call.<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   *<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * &lt;p&gt;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   * The obtained {@link com.google.protobuf.RpcChannel} instance can be used to access a published<a name="line.656"></a>
-<span class="sourceLineNo">657</span>   * coprocessor {@link com.google.protobuf.Service} using standard protobuf service invocations:<a name="line.657"></a>
-<span class="sourceLineNo">658</span>   * &lt;/p&gt;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   *<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * &lt;div style="background-color: #cccccc; padding: 2px"&gt;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;blockquote&gt;&lt;pre&gt;<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * CoprocessorRpcChannel channel = myTable.coprocessorService(rowkey);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * MyService.BlockingInterface service = MyService.newBlockingStub(channel);<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * MyCallRequest request = MyCallRequest.newBuilder()<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   *     ...<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   *     .build();<a name="line.666"></a>
-<span class="sourceLineNo">667</span>   * MyCallResponse response = service.myCall(null, request);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>   * &lt;/pre&gt;&lt;/blockquote&gt;&lt;/div&gt;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>   *<a name="line.669"></a>
-<span class="sourceLineNo">670</span>   * @param row The row key used to identify the remote region location<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * @return A CoprocessorRpcChannel instance<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   */<a name="line.672"></a>
-<span class="sourceLineNo">673</span>  default CoprocessorRpcChannel coprocessorService(byte[] row) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    throw new NotImplementedException("Add an implementation!");<a name="line.674"></a>
-<span class="sourceLineNo">675</span>  }<a name="line.675"></a>
-<span class="sourceLineNo">676</span><a name="line.676"></a>
-<span class="sourceLineNo">677</span>  /**<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.680"></a>
-<span class="sourceLineNo">681</span>   * with each {@link com.google.protobuf.Service} instance.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   *<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   * @param service the protocol buffer {@code Service} implementation to call<a name="line.683"></a>
-<span class="sourceLineNo">684</span>   * @param startKey start region selection with region containing this row.  If {@code null}, the<a name="line.684"></a>
-<span class="sourceLineNo">685</span>   *   selection will start with the first table region.<a name="line.685"></a>
-<span class="sourceLineNo">686</span>   * @param endKey select regions up to and including the region containing this row. If<a name="line.686"></a>
-<span class="sourceLineNo">687</span>   *   {@code null}, selection will continue through the last table region.<a name="line.687"></a>
-<span class="sourceLineNo">688</span>   * @param callable this instance's<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   *   {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   *   method will be invoked once per table region, using the {@link com.google.protobuf.Service}<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   *   instance connected to that region.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * @param &lt;T&gt; the {@link com.google.protobuf.Service} subclass to connect to<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @param &lt;R&gt; Return type for the {@code callable} parameter's {@link<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   * @return a map of result values keyed by region name<a name="line.695"></a>
-<span class="sourceLineNo">696</span>   */<a name="line.696"></a>
-<span class="sourceLineNo">697</span>  default &lt;T extends Service, R&gt; Map&lt;byte[],R&gt; coprocessorService(final Class&lt;T&gt; service,<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    byte[] startKey, byte[] endKey, final Batch.Call&lt;T,R&gt; callable)<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    throws ServiceException, Throwable {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    throw new NotImplementedException("Add an implementation!");<a name="line.700"></a>
-<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   * with each {@link Service} instance.<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   *<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * &lt;p&gt; The given<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   * method will be called with the return value from each region's<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} invocation. &lt;/p&gt;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   *<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * @param service the protocol buffer {@code Service} implementation to call<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   * @param startKey start region selection with region containing this row.  If {@code null}, the<a name="line.715"></a>
-<span class="sourceLineNo">716</span>   *   selection will start with the first table region.<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * @param endKey select regions up to and including the region containing this row. If<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   *   {@code null}, selection will continue through the last table region.<a name="line.718"></a>
-<span class="sourceLineNo">719</span>   * @param callable this instance's<a name="line.719"></a>
-<span class="sourceLineNo">720</span>   *   {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   *   method will be invoked once per table region, using the {@link Service} instance connected to<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   *   that region.<a name="line.722"></a>
-<span class="sourceLineNo">723</span>   * @param &lt;T&gt; the {@link Service} subclass to connect to<a name="line.723"></a>
-<span class="sourceLineNo">724</span>   * @param &lt;R&gt; Return type for the {@code callable} parameter's {@link<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   */<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  default &lt;T extends Service, R&gt; void coprocessorService(final Class&lt;T&gt; service,<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    byte[] startKey, byte[] endKey, final Batch.Call&lt;T,R&gt; callable,<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    final Batch.Callback&lt;R&gt; callback) throws ServiceException, Throwable {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    throw new NotImplementedException("Add an implementation!");<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  }<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>  /**<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * the invocations to the same region server will be batched into one call. The coprocessor<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   * service is invoked according to the service instance, method name and parameters.<a name="line.737"></a>
-<span class="sourceLineNo">738</span>   *<a name="line.738"></a>
-<span class="sourceLineNo">739</span>   * @param methodDescriptor<a name="line.739"></a>
-<span class="sourceLineNo">740</span>   *          the descriptor for the protobuf service method to call.<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * @param request<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   *          the method call parameters<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * @param startKey<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   *          start region selection with region containing this row. If {@code null}, the<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   *          selection will start with the first table region.<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param endKey<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   *          select regions up to and including the region containing this row. If {@code null},<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   *          selection will continue through the last table region.<a name="line.748"></a>
-<span class="sourceLineNo">749</span>   * @param responsePrototype<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   *          the proto type of the response of the method in Service.<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   * @param &lt;R&gt;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   *          the response type for the coprocessor Service method<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @return a map of result values keyed by region name<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   */<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  default &lt;R extends Message&gt; Map&lt;byte[], R&gt; batchCoprocessorService(<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    Descriptors.MethodDescriptor methodDescriptor, Message request,<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    byte[] startKey, byte[] endKey, R responsePrototype) throws ServiceException, Throwable {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    throw new NotImplementedException("Add an implementation!");<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  /**<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * the invocations to the same region server will be batched into one call. The coprocessor<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * service is invoked according to the service instance, method name and parameters.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   *<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * &lt;p&gt;<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   * The given<a name="line.768"></a>
-<span class="sourceLineNo">769</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}<a name="line.769"></a>
-<span class="sourceLineNo">770</span>   * method will be called with the return value from each region's invocation.<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   * &lt;/p&gt;<a name="line.771"></a>
-<span class="sourceLineNo">772</span>   *<a name="line.772"></a>
-<span class="sourceLineNo">773</span>   * @param methodDescriptor the descriptor for the protobuf service method to call.<a name="line.773"></a>
-<span class="sourceLineNo">774</span>   * @param request the method call parameters<a name="line.774"></a>
-<span class="sourceLineNo">775</span>   * @param startKey start region selection with region containing this row.<a name="line.775"></a>
-<span class="sourceLineNo">776</span>   *   If {@code null}, the selection will start with the first table region.<a name="line.776"></a>
-<span class="sourceLineNo">777</span>   * @param endKey select regions up to and including the region containing this row.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>   *   If {@code null}, selection will continue through the last table region.<a name="line.778"></a>
-<span class="sourceLineNo">779</span>   * @param responsePrototype the proto type of the response of the method in Service.<a name="line.779"></a>
-<span class="sourceLineNo">780</span>   * @param callback callback to invoke with the response for each region<a name="line.780"></a>
-<span class="sourceLineNo">781</span>   * @param &lt;R&gt;<a name="line.781"></a>
-<span class="sourceLineNo">782</span>   *          the response type for the coprocessor Service method<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   */<a name="line.783"></a>
-<span class="sourceLineNo">784</span>  default &lt;R extends Message&gt; void batchCoprocessorService(<a name="line.784"></a>
-<span class="sourceLineNo">785</span>      Descriptors.MethodDescriptor methodDescriptor, Message request, byte[] startKey,<a name="line.785"></a>
-<span class="sourceLineNo">786</span>      byte[] endKey, R responsePrototype, Batch.Callback&lt;R&gt; callback)<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      throws ServiceException, Throwable {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    throw new NotImplementedException("Add an implementation!");<a name="line.788"></a>
-<span class="sourceLineNo">789</span>  }<a name="line.789"></a>
-<span class="sourceLineNo">790</span><a name="line.790"></a>
-<span class="sourceLineNo">791</span>  /**<a name="line.791"></a>
-<span class="sourceLineNo">792</span>   * Atomically checks if a row/family/qualifier value matches the expected value.<a name="line.792"></a>
-<span class="sourceLineNo">793</span>   * If it does, it performs the row mutations.  If the passed value is null, the check<a name="line.793"></a>
-<span class="sourceLineNo">794</span>   * is for the lack of column (ie: non-existence)<a name="line.794"></a>
-<span class="sourceLineNo">795</span>   *<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * The expected value argument of this call is on the left and the current<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * value of the cell is on the right side of the comparison operator.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   *<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * Ie. eg. GREATER operator means expected value &gt; existing &lt;=&gt; perform row mutations.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   *<a name="line.800"></a>
-<span class="sourceLineNo">801</span>   * @param row to check<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @param family column family to check<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   * @param qualifier column qualifier to check<a name="line.803"></a>
-<span class="sourceLineNo">804</span>   * @param compareOp the comparison operator<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * @param value the expected value<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   * @param mutation  mutations to perform if check succeeds<a name="line.806"></a>
-<span class="sourceLineNo">807</span>   * @throws IOException e<a name="line.807"></a>
-<span class="sourceLineNo">808</span>   * @return true if the new put was executed, false otherwise<a name="line.808"></a>
-<span class="sourceLineNo">809</span>   * @deprecated Since 2.0.0. Will be removed in 3.0.0. Use {@link #checkAndMutate(byte[], byte[])}<a name="line.809"></a>
-<span class="sourceLineNo">810</span>   */<a name="line.810"></a>
-<span class="sourceLineNo">811</span>  @Deprecated<a name="line.811"></a>
-<span class="sourceLineNo">812</span>  default boolean checkAndMutate(byte[] row, byte[] family, byte[] qualifier,<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      CompareFilter.CompareOp compareOp, byte[] value, RowMutations mutation) throws IOException {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    throw new NotImplementedException("Add an implementation!");<a name="line.814"></a>
-<span class="sourceLineNo">815</span>  }<a name="line.815"></a>
-<span class="sourceLineNo">816</span><a name="line.816"></a>
-<span class="sourceLineNo">817</span>  /**<a name="line.817"></a>
-<span class="sourceLineNo">818</span>   * Atomically checks if a row/family/qualifier value matches the expected value.<a name="line.818"></a>
-<span class="sourceLineNo">819</span>   * If it does, it performs the row mutations.  If the passed value is null, the check<a name="line.819"></a>
-<span class="sourceLineNo">820</span>   * is for the lack of column (ie: non-existence)<a name="line.820"></a>
-<span class="sourceLineNo">821</span>   *<a name="line.821"></a>
-<span class="sourceLineNo">822</span>   * The expected value argument of this call is on the left and the current<a name="line.822"></a>
-<span class="sourceLineNo">823</span>   * value of the cell is on the right side of the comparison operator.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>   *<a name="line.824"></a>
-<span class="sourceLineNo">825</span>   * Ie. eg. GREATER operator means expected value &gt; existing &lt;=&gt; perform row mutations.<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   *<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   * @param row to check<a name="line.827"></a>
-<span class="sourceLineNo">828</span>   * @param family column family to check<a name="line.828"></a>
-<span class="sourceLineNo">829</span>   * @param qualifier column qualifier to check<a name="line.829"></a>
-<span class="sourceLineNo">830</span>   * @param op the comparison operator<a name="line.830"></a>
-<span class="sourceLineNo">831</span>   * @param value the expected value<a name="line.831"></a>
-<span class="sourceLineNo">832</span>   * @param mutation  mutations to perform if check succeeds<a name="line.832"></a>
-<span class="sourceLineNo">833</span>   * @throws IOException e<a name="line.833"></a>
-<span class="sourceLineNo">834</span>   * @return true if the new put was executed, false otherwise<a name="line.834"></a>
-<span class="sourceLineNo">835</span>   * @deprecated Since 2.0.0. Will be removed in 3.0.0. Use {@link #checkAndMutate(byte[], byte[])}<a name="line.835"></a>
-<span class="sourceLineNo">836</span>   */<a name="line.836"></a>
-<span class="sourceLineNo">837</span>  @Deprecated<a name="line.837"></a>
-<span class="sourceLineNo">838</span>  default boolean checkAndMutate(byte[] row, byte[] family, byte[] qualifier, CompareOperator op,<a name="line.838"></a>
-<span class="sourceLineNo">839</span>                         byte[] value, RowMutations mutation) throws IOException {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    throw new NotImplementedException("Add an implementation!");<a name="line.840"></a>
-<span class="sourceLineNo">841</span>  }<a name="line.841"></a>
-<span class="sourceLineNo">842</span><a name="line.842"></a>
-<span class="sourceLineNo">843</span>  /**<a name="line.843"></a>
-<span class="sourceLineNo">844</span>   * Get timeout of each rpc request in this Table instance. It will be overridden by a more<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * specific rpc timeout config such as readRpcTimeout or writeRpcTimeout.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   * @see #getReadRpcTimeout(TimeUnit)<a name="line.846"></a>
-<span class="sourceLineNo">847</span>   * @see #getWriteRpcTimeout(TimeUnit)<a name="line.847"></a>
-<span class="sourceLineNo">848</span>   * @param unit the unit of time the timeout to be represented in<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * @return rpc timeout in the specified time unit<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   */<a name="line.850"></a>
-<span class="sourceLineNo">851</span>  default long getRpcTimeout(TimeUnit unit) {<a name="line.851"></a>
-<span class="sourceLineNo">852</span>    throw new NotImplementedException("Add an implementation!");<a name="line.852"></a>
-<span class="sourceLineNo">853</span>  }<a name="line.853"></a>
-<span class="sourceLineNo">854</span><a name="line.854"></a>
-<span class="sourceLineNo">855</span>  /**<a name="line.855"></a>
-<span class="sourceLineNo">856</span>   * Get timeout (millisecond) of each rpc request in this Table instance.<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   *<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * @return Currently configured read timeout<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * @deprecated use {@link #getReadRpcTimeout(TimeUnit)} or<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   *             {@link #getWriteRpcTimeout(TimeUnit)} instead<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  @Deprecated<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  default int getRpcTimeout() {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>    return (int)getRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  }<a name="line.865"></a>
-<span class="sourceLineNo">866</span><a name="line.866"></a>
-<span class="sourceLineNo">867</span>  /**<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * Set timeout (millisecond) of each rpc request in operations of this Table instance, will<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * override the value of hbase.rpc.timeout in configuration.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * If a rpc request waiting too long, it will stop waiting and send a new request to retry until<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * retries exhausted or operation timeout reached.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   * &lt;p&gt;<a name="line.872"></a>
-<span class="sourceLineNo">873</span>   * NOTE: This will set both the read and write timeout settings to the provided value.<a name="line.873"></a>
-<span class="sourceLineNo">874</span>   *<a name="line.874"></a>
-<span class="sourceLineNo">875</span>   * @param rpcTimeout the timeout of each rpc request in millisecond.<a name="line.875"></a>
-<span class="sourceLineNo">876</span>   *<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * @deprecated Use setReadRpcTimeout or setWriteRpcTimeout instead<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
-<span class="sourceLineNo">879</span>  @Deprecated<a name="line.879"></a>
-<span class="sourceLineNo">880</span>  default void setRpcTimeout(int rpcTimeout) {<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    setReadRpcTimeout(rpcTimeout);<a name="line.881"></a>
-<span class="sourceLineNo">882</span>    setWriteRpcTimeout(rpcTimeout);<a name="line.882"></a>
-<span class="sourceLineNo">883</span>  }<a name="line.883"></a>
-<span class="sourceLineNo">884</span><a name="line.884"></a>
-<span class="sourceLineNo">885</span>  /**<a name="line.885"></a>
-<span class="sourceLineNo">886</span>   * Get timeout of each rpc read request in this Table instance.<a name="line.886"></a>
-<span class="sourceLineNo">887</span>   * @param unit the unit of time the timeout to be represented in<a name="line.887"></a>
-<span class="sourceLineNo">888</span>   * @return read rpc timeout in the specified time unit<a name="line.888"></a>
-<span class="sourceLineNo">889</span>   */<a name="line.889"></a>
-<span class="sourceLineNo">890</span>  default long getReadRpcTimeout(TimeUnit unit) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    throw new NotImplementedException("Add an implementation!");<a name="line.891"></a>
-<span class="sourceLineNo">892</span>  }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span>  /**<a name="line.894"></a>
-<span class="sourceLineNo">895</span>   * Get timeout (millisecond) of each rpc read request in this Table instance.<a name="line.895"></a>
-<span class="sourceLineNo">896</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.896"></a>
-<span class="sourceLineNo">897</span>   *             use {@link #getReadRpcTimeout(TimeUnit)} instead<a name="line.897"></a>
-<span class="sourceLineNo">898</span>   */<a name="line.898"></a>
-<span class="sourceLineNo">899</span>  @Deprecated<a name="line.899"></a>
-<span class="sourceLineNo">900</span>  default int getReadRpcTimeout() {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>    return (int)getReadRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>  }<a name="line.902"></a>
-<span class="sourceLineNo">903</span><a name="line.903"></a>
-<span class="sourceLineNo">904</span>  /**<a name="line.904"></a>
-<span class="sourceLineNo">905</span>   * Set timeout (millisecond) of each rpc read request in operations of this Table instance, will<a name="line.905"></a>
-<span class="sourceLineNo">906</span>   * override the value of hbase.rpc.read.timeout in configuration.<a name="line.906"></a>
-<span class="sourceLineNo">907</span>   * If a rpc read request waiting too long, it will stop waiting and send a new request to retry<a name="line.907"></a>
-<span class="sourceLineNo">908</span>   * until retries exhausted or operation timeout reached.<a name="line.908"></a>
-<span class="sourceLineNo">909</span>   *<a name="line.909"></a>
-<span class="sourceLineNo">910</span>   * @param readRpcTimeout the timeout for read rpc request in milliseconds<a name="line.910"></a>
-<span class="sourceLineNo">911</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setReadRpcTimeout} instead<a name="line.911"></a>
-<span class="sourceLineNo">912</span>   */<a name="line.912"></a>
-<span class="sourceLineNo">913</span>  @Deprecated<a name="line.913"></a>
-<span class="sourceLineNo">914</span>  default void setReadRpcTimeout(int readRpcTimeout) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>    throw new NotImplementedException("Add an implementation!");<a name="line.915"></a>
-<span class="sourceLineNo">916</span>  }<a name="line.916"></a>
-<span class="sourceLineNo">917</span><a name="line.917"></a>
-<span class="sourceLineNo">918</span>  /**<a name="line.918"></a>
-<span class="sourceLineNo">919</span>   * Get timeout of each rpc write request in this Table instance.<a name="line.919"></a>
-<span class="sourceLineNo">920</span>   * @param unit the unit of time the timeout to be represented in<a name="line.920"></a>
-<span class="sourceLineNo">921</span>   * @return write rpc timeout in the specified time unit<a name="line.921"></a>
-<span class="sourceLineNo">922</span>   */<a name="line.922"></a>
-<span class="sourceLineNo">923</span>  default long getWriteRpcTimeout(TimeUnit unit) {<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    throw new NotImplementedException("Add an implementation!");<a name="line.924"></a>
-<span class="sourceLineNo">925</span>  }<a name="line.925"></a>
-<span class="sourceLineNo">926</span><a name="line.926"></a>
-<span class="sourceLineNo">927</span>  /**<a name="line.927"></a>
-<span class="sourceLineNo">928</span>   * Get timeout (millisecond) of each rpc write request in this Table instance.<a name="line.928"></a>
-<span class="sourceLineNo">929</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.929"></a>
-<span class="sourceLineNo">930</span>   *             use {@link #getWriteRpcTimeout(TimeUnit)} instead<a name="line.930"></a>
-<span class="sourceLineNo">931</span>   */<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  @Deprecated<a name="line.932"></a>
-<span class="sourceLineNo">933</span>  default int getWriteRpcTimeout() {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    return (int)getWriteRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.934"></a>
-<span class="sourceLineNo">935</span>  }<a name="line.935"></a>
-<span class="sourceLineNo">936</span><a name="line.936"></a>
-<span class="sourceLineNo">937</span>  /**<a name="line.937"></a>
-<span class="sourceLineNo">938</span>   * Set timeout (millisecond) of each rpc write request in operations of this Table instance, will<a name="line.938"></a>
-<span class="sourceLineNo">939</span>   * override the value of hbase.rpc.write.timeout in configuration.<a name="line.939"></a>
-<span class="sourceLineNo">940</span>   * If a rpc write request waiting too long, it will stop waiting and send a new request to retry<a name="line.940"></a>
-<span class="sourceLineNo">941</span>   * until retries exhausted or operation timeout reached.<a name="line.941"></a>
-<span class="sourceLineNo">942</span>   *<a name="line.942"></a>
-<span class="sourceLineNo">943</span>   * @param writeRpcTimeout the timeout for write rpc request in milliseconds<a name="line.943"></a>
-<span class="sourceLineNo">944</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setWriteRpcTimeout} instead<a name="line.944"></a>
-<span class="sourceLineNo">945</span>   */<a name="line.945"></a>
-<span class="sourceLineNo">946</span>  @Deprecated<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  default void setWriteRpcTimeout(int writeRpcTimeout) {<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    throw new NotImplementedException("Add an implementation!");<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  }<a name="line.949"></a>
-<span class="sourceLineNo">950</span><a name="line.950"></a>
-<span class="sourceLineNo">951</span>  /**<a name="line.951"></a>
-<span class="sourceLineNo">952</span>   * Get timeout of each operation in Table instance.<a name="line.952"></a>
-<span class="sourceLineNo">953</span>   * @param unit the unit of time the timeout to be represented in<a name="line.953"></a>
-<span class="sourceLineNo">954</span>   * @return operation rpc timeout in the specified time unit<a name="line.954"></a>
-<span class="sourceLineNo">955</span>   */<a name="line.955"></a>
-<span class="sourceLineNo">956</span>  default long getOperationTimeout(TimeUnit unit) {<a name="line.956"></a>
-<span class="sourceLineNo">957</span>    throw new NotImplementedException("Add an implementation!");<a name="line.957"></a>
-<span class="sourceLineNo">958</span>  }<a name="line.958"></a>
-<span class="sourceLineNo">959</span><a name="line.959"></a>
-<span class="sourceLineNo">960</span>  /**<a name="line.960"></a>
-<span class="sourceLineNo">961</span>   * Get timeout (millisecond) of each operation for in Table instance.<a name="line.961"></a>
-<span class="sourceLineNo">962</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.962"></a>
-<span class="sourceLineNo">963</span>   *             use {@link #getOperationTimeout(TimeUnit)} instead<a name="line.963"></a>
-<span class="sourceLineNo">964</span>   */<a name="line.964"></a>
-<span class="sourceLineNo">965</span>  @Deprecated<a name="line.965"></a>
-<span class="sourceLineNo">966</span>  default int getOperationTimeout() {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    return (int)getOperationTimeout(TimeUnit.MILLISECONDS);<a name="line.967"></a>
-<span class="sourceLineNo">968</span>  }<a name="line.968"></a>
-<span class="sourceLineNo">969</span><a name="line.969"></a>
-<span class="sourceLineNo">970</span>  /**<a name="line.970"></a>
-<span class="sourceLineNo">971</span>   * Set timeout (millisecond) of each operation in this Table instance, will override the value<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   * of hbase.client.operation.timeout in configuration.<a name="line.972"></a>
-<span class="sourceLineNo">973</span>   * Operation timeout is a top-level restriction that makes sure a blocking method will not be<a name="line.973"></a>
-<span class="sourceLineNo">974</span>   * blocked more than this. In each operation, if rpc request fails because of timeout or<a name="line.974"></a>
-<span class="sourceLineNo">975</span>   * other reason, it will retry until success or throw a RetriesExhaustedException. But if the<a name="line.975"></a>
-<span class="sourceLineNo">976</span>   * total time being blocking reach the operation timeout before retries exhausted, it will break<a name="line.976"></a>
-<span class="sourceLineNo">977</span>   * early and throw SocketTimeoutException.<a name="line.977"></a>
-<span class="sourceLineNo">978</span>   * @param operationTimeout the total timeout of each operation in millisecond.<a name="line.978"></a>
-<span class="sourceLineNo">979</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setOperationTimeout} instead<a name="line.979"></a>
-<span class="sourceLineNo">980</span>   */<a name="line.980"></a>
-<span class="sourceLineNo">981</span>  @Deprecated<a name="line.981"></a>
-<span class="sourceLineNo">982</span>  default void setOperationTimeout(int operationTimeout) {<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    throw new NotImplementedException("Add an implementation!");<a name="line.983"></a>
-<span class="sourceLineNo">984</span>  }<a name="line.984"></a>
-<span class="sourceLineNo">985</span>}<a name="line.985"></a>
+<span class="sourceLineNo">566</span>   * @param append object that specifies the columns and values to be appended<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @throws IOException e<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   * @return values of columns after the append operation (maybe null)<a name="line.568"></a>
+<span class="sourceLineNo">569</span>   */<a name="line.569"></a>
+<span class="sourceLineNo">570</span>  default Result append(final Append append) throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    throw new NotImplementedException("Add an implementation!");<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>  /**<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * Increments one or more columns within a single row.<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * &lt;p&gt;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * This operation ensures atomicity to readers. Increments are done<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * under a single row lock, so write operations to a row are synchronized, and<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * readers are guaranteed to see this operation fully completed.<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   *<a name="line.580"></a>
+<span class="sourceLineNo">581</span>   * @param increment object that specifies the columns and amounts to be used<a name="line.581"></a>
+<span class="sourceLineNo">582</span>   *                  for the increment operations<a name="line.582"></a>
+<span class="sourceLineNo">583</span>   * @throws IOException e<a name="line.583"></a>
+<span class="sourceLineNo">584</span>   * @return values of columns after the increment<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
+<span class="sourceLineNo">586</span>  default Result increment(final Increment increment) throws IOException {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    throw new NotImplementedException("Add an implementation!");<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span><a name="line.589"></a>
+<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
+<span class="sourceLineNo">591</span>   * See {@link #incrementColumnValue(byte[], byte[], byte[], long, Durability)}<a name="line.591"></a>
+<span class="sourceLineNo">592</span>   * &lt;p&gt;<a name="line.592"></a>
+<span class="sourceLineNo">593</span>   * The {@link Durability} is defaulted to {@link Durability#SYNC_WAL}.<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @param row The row that contains the cell to increment.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   * @param family The column family of the cell to increment.<a name="line.595"></a>
+<span class="sourceLineNo">596</span>   * @param qualifier The column qualifier of the cell to increment.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>   * @param amount The amount to increment the cell with (or decrement, if the<a name="line.597"></a>
+<span class="sourceLineNo">598</span>   * amount is negative).<a name="line.598"></a>
+<span class="sourceLineNo">599</span>   * @return The new value, post increment.<a name="line.599"></a>
+<span class="sourceLineNo">600</span>   * @throws IOException if a remote or network exception occurs.<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  default long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier, long amount)<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      throws IOException {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    Increment increment = new Increment(row).addColumn(family, qualifier, amount);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    Cell cell = increment(increment).getColumnLatestCell(family, qualifier);<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());<a name="line.606"></a>
+<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>  /**<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   * Atomically increments a column value. If the column value already exists<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * and is not a big-endian long, this could throw an exception. If the column<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * value does not yet exist it is initialized to &lt;code&gt;amount&lt;/code&gt; and<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   * written to the specified column.<a name="line.613"></a>
+<span class="sourceLineNo">614</span>   *<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * &lt;p&gt;Setting durability to {@link Durability#SKIP_WAL} means that in a fail<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   * scenario you will lose any increments that have not been flushed.<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   * @param row The row that contains the cell to increment.<a name="line.617"></a>
+<span class="sourceLineNo">618</span>   * @param family The column family of the cell to increment.<a name="line.618"></a>
+<span class="sourceLineNo">619</span>   * @param qualifier The column qualifier of the cell to increment.<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * @param amount The amount to increment the cell with (or decrement, if the<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * amount is negative).<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @param durability The persistence guarantee for this increment.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * @return The new value, post increment.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * @throws IOException if a remote or network exception occurs.<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
+<span class="sourceLineNo">626</span>  default long incrementColumnValue(byte[] row, byte[] family, byte[] qualifier,<a name="line.626"></a>
+<span class="sourceLineNo">627</span>    long amount, Durability durability) throws IOException {<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    Increment increment = new Increment(row)<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        .addColumn(family, qualifier, amount)<a name="line.629"></a>
+<span class="sourceLineNo">630</span>        .setDurability(durability);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    Cell cell = increment(increment).getColumnLatestCell(family, qualifier);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength());<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  }<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>  /**<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * Releases any resources held or pending changes in internal buffers.<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   *<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @throws IOException if a remote or network exception occurs.<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  @Override<a name="line.640"></a>
+<span class="sourceLineNo">641</span>  default void close() throws IOException {<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    throw new NotImplementedException("Add an implementation!");<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Creates and returns a {@link com.google.protobuf.RpcChannel} instance connected to the<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * table region containing the specified row.  The row given does not actually have<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * to exist.  Whichever region would contain the row based on start and end keys will<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   * be used.  Note that the {@code row} parameter is also not passed to the<a name="line.649"></a>
+<span class="sourceLineNo">650</span>   * coprocessor handler registered for this protocol, unless the {@code row}<a name="line.650"></a>
+<span class="sourceLineNo">651</span>   * is separately passed as an argument in the service request.  The parameter<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * here is only used to locate the region used to handle the call.<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   *<a name="line.653"></a>
+<span class="sourceLineNo">654</span>   * &lt;p&gt;<a name="line.654"></a>
+<span class="sourceLineNo">655</span>   * The obtained {@link com.google.protobuf.RpcChannel} instance can be used to access a published<a name="line.655"></a>
+<span class="sourceLineNo">656</span>   * coprocessor {@link com.google.protobuf.Service} using standard protobuf service invocations:<a name="line.656"></a>
+<span class="sourceLineNo">657</span>   * &lt;/p&gt;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>   *<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * &lt;div style="background-color: #cccccc; padding: 2px"&gt;<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * &lt;blockquote&gt;&lt;pre&gt;<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * CoprocessorRpcChannel channel = myTable.coprocessorService(rowkey);<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * MyService.BlockingInterface service = MyService.newBlockingStub(channel);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   * MyCallRequest request = MyCallRequest.newBuilder()<a name="line.663"></a>
+<span class="sourceLineNo">664</span>   *     ...<a name="line.664"></a>
+<span class="sourceLineNo">665</span>   *     .build();<a name="line.665"></a>
+<span class="sourceLineNo">666</span>   * MyCallResponse response = service.myCall(null, request);<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   * &lt;/pre&gt;&lt;/blockquote&gt;&lt;/div&gt;<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   *<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * @param row The row key used to identify the remote region location<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * @return A CoprocessorRpcChannel instance<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   */<a name="line.671"></a>
+<span class="sourceLineNo">672</span>  default CoprocessorRpcChannel coprocessorService(byte[] row) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    throw new NotImplementedException("Add an implementation!");<a name="line.673"></a>
+<span class="sourceLineNo">674</span>  }<a name="line.674"></a>
+<span class="sourceLineNo">675</span><a name="line.675"></a>
+<span class="sourceLineNo">676</span>  /**<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and<a name="line.678"></a>
+<span class="sourceLineNo">679</span>   * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * with each {@link com.google.protobuf.Service} instance.<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   *<a name="line.681"></a>
+<span class="sourceLineNo">682</span>   * @param service the protocol buffer {@code Service} implementation to call<a name="line.682"></a>
+<span class="sourceLineNo">683</span>   * @param startKey start region selection with region containing this row.  If {@code null}, the<a name="line.683"></a>
+<span class="sourceLineNo">684</span>   *   selection will start with the first table region.<a name="line.684"></a>
+<span class="sourceLineNo">685</span>   * @param endKey select regions up to and including the region containing this row. If<a name="line.685"></a>
+<span class="sourceLineNo">686</span>   *   {@code null}, selection will continue through the last table region.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * @param callable this instance's<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   *   {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   *   method will be invoked once per table region, using the {@link com.google.protobuf.Service}<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   *   instance connected to that region.<a name="line.690"></a>
+<span class="sourceLineNo">691</span>   * @param &lt;T&gt; the {@link com.google.protobuf.Service} subclass to connect to<a name="line.691"></a>
+<span class="sourceLineNo">692</span>   * @param &lt;R&gt; Return type for the {@code callable} parameter's {@link<a name="line.692"></a>
+<span class="sourceLineNo">693</span>   * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.693"></a>
+<span class="sourceLineNo">694</span>   * @return a map of result values keyed by region name<a name="line.694"></a>
+<span class="sourceLineNo">695</span>   */<a name="line.695"></a>
+<span class="sourceLineNo">696</span>  default &lt;T extends Service, R&gt; Map&lt;byte[],R&gt; coprocessorService(final Class&lt;T&gt; service,<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    byte[] startKey, byte[] endKey, final Batch.Call&lt;T,R&gt; callable)<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    throws ServiceException, Throwable {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    throw new NotImplementedException("Add an implementation!");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>  }<a name="line.700"></a>
+<span class="sourceLineNo">701</span><a name="line.701"></a>
+<span class="sourceLineNo">702</span>  /**<a name="line.702"></a>
+<span class="sourceLineNo">703</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.703"></a>
+<span class="sourceLineNo">704</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), and<a name="line.704"></a>
+<span class="sourceLineNo">705</span>   * invokes the passed {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.705"></a>
+<span class="sourceLineNo">706</span>   * with each {@link Service} instance.<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   *<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * &lt;p&gt; The given<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}<a name="line.709"></a>
+<span class="sourceLineNo">710</span>   * method will be called with the return value from each region's<a name="line.710"></a>
+<span class="sourceLineNo">711</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} invocation. &lt;/p&gt;<a name="line.711"></a>
+<span class="sourceLineNo">712</span>   *<a name="line.712"></a>
+<span class="sourceLineNo">713</span>   * @param service the protocol buffer {@code Service} implementation to call<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * @param startKey start region selection with region containing this row.  If {@code null}, the<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   *   selection will start with the first table region.<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @param endKey select regions up to and including the region containing this row. If<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   *   {@code null}, selection will continue through the last table region.<a name="line.717"></a>
+<span class="sourceLineNo">718</span>   * @param callable this instance's<a name="line.718"></a>
+<span class="sourceLineNo">719</span>   *   {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call}<a name="line.719"></a>
+<span class="sourceLineNo">720</span>   *   method will be invoked once per table region, using the {@link Service} instance connected to<a name="line.720"></a>
+<span class="sourceLineNo">721</span>   *   that region.<a name="line.721"></a>
+<span class="sourceLineNo">722</span>   * @param &lt;T&gt; the {@link Service} subclass to connect to<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * @param &lt;R&gt; Return type for the {@code callable} parameter's {@link<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * org.apache.hadoop.hbase.client.coprocessor.Batch.Call#call} method<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   */<a name="line.725"></a>
+<span class="sourceLineNo">726</span>  default &lt;T extends Service, R&gt; void coprocessorService(final Class&lt;T&gt; service,<a name="line.726"></a>
+<span class="sourceLineNo">727</span>    byte[] startKey, byte[] endKey, final Batch.Call&lt;T,R&gt; callable,<a name="line.727"></a>
+<span class="sourceLineNo">728</span>    final Batch.Callback&lt;R&gt; callback) throws ServiceException, Throwable {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    throw new NotImplementedException("Add an implementation!");<a name="line.729"></a>
+<span class="sourceLineNo">730</span>  }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>  /**<a name="line.732"></a>
+<span class="sourceLineNo">733</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.733"></a>
+<span class="sourceLineNo">734</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all<a name="line.734"></a>
+<span class="sourceLineNo">735</span>   * the invocations to the same region server will be batched into one call. The coprocessor<a name="line.735"></a>
+<span class="sourceLineNo">736</span>   * service is invoked according to the service instance, method name and parameters.<a name="line.736"></a>
+<span class="sourceLineNo">737</span>   *<a name="line.737"></a>
+<span class="sourceLineNo">738</span>   * @param methodDescriptor<a name="line.738"></a>
+<span class="sourceLineNo">739</span>   *          the descriptor for the protobuf service method to call.<a name="line.739"></a>
+<span class="sourceLineNo">740</span>   * @param request<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   *          the method call parameters<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * @param startKey<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   *          start region selection with region containing this row. If {@code null}, the<a name="line.743"></a>
+<span class="sourceLineNo">744</span>   *          selection will start with the first table region.<a name="line.744"></a>
+<span class="sourceLineNo">745</span>   * @param endKey<a name="line.745"></a>
+<span class="sourceLineNo">746</span>   *          select regions up to and including the region containing this row. If {@code null},<a name="line.746"></a>
+<span class="sourceLineNo">747</span>   *          selection will continue through the last table region.<a name="line.747"></a>
+<span class="sourceLineNo">748</span>   * @param responsePrototype<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   *          the proto type of the response of the method in Service.<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * @param &lt;R&gt;<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   *          the response type for the coprocessor Service method<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return a map of result values keyed by region name<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  default &lt;R extends Message&gt; Map&lt;byte[], R&gt; batchCoprocessorService(<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    Descriptors.MethodDescriptor methodDescriptor, Message request,<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    byte[] startKey, byte[] endKey, R responsePrototype) throws ServiceException, Throwable {<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    throw new NotImplementedException("Add an implementation!");<a name="line.757"></a>
+<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
+<span class="sourceLineNo">759</span><a name="line.759"></a>
+<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * Creates an instance of the given {@link com.google.protobuf.Service} subclass for each table<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * region spanning the range from the {@code startKey} row to {@code endKey} row (inclusive), all<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   * the invocations to the same region server will be batched into one call. The coprocessor<a name="line.763"></a>
+<span class="sourceLineNo">764</span>   * service is invoked according to the service instance, method name and parameters.<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   *<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * &lt;p&gt;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * The given<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   * {@link org.apache.hadoop.hbase.client.coprocessor.Batch.Callback#update(byte[],byte[],Object)}<a name="line.768"></a>
+<span class="sourceLineNo">769</span>   * method will be called with the return value from each region's invocation.<a name="line.769"></a>
+<span class="sourceLineNo">770</span>   * &lt;/p&gt;<a name="line.770"></a>
+<span class="sourceLineNo">771</span>   *<a name="line.771"></a>
+<span class="sourceLineNo">772</span>   * @param methodDescriptor the descriptor for the protobuf service method to call.<a name="line.772"></a>
+<span class="sourceLineNo">773</span>   * @param request the method call parameters<a name="line.773"></a>
+<span class="sourceLineNo">774</span>   * @param startKey start region selection with region containing this row.<a name="line.774"></a>
+<span class="sourceLineNo">775</span>   *   If {@code null}, the selection will start with the first table region.<a name="line.775"></a>
+<span class="sourceLineNo">776</span>   * @param endKey select regions up to and including the region containing this row.<a name="line.776"></a>
+<span class="sourceLineNo">777</span>   *   If {@code null}, selection will continue through the last table region.<a name="line.777"></a>
+<span class="sourceLineNo">778</span>   * @param responsePrototype the proto type of the response of the method in Service.<a name="line.778"></a>
+<span class="sourceLineNo">779</span>   * @param callback callback to invoke with the response for each region<a name="line.779"></a>
+<span class="sourceLineNo">780</span>   * @param &lt;R&gt;<a name="line.780"></a>
+<span class="sourceLineNo">781</span>   *          the response type for the coprocessor Service method<a name="line.781"></a>
+<span class="sourceLineNo">782</span>   */<a name="line.782"></a>
+<span class="sourceLineNo">783</span>  default &lt;R extends Message&gt; void batchCoprocessorService(<a name="line.783"></a>
+<span class="sourceLineNo">784</span>      Descriptors.MethodDescriptor methodDescriptor, Message request, byte[] startKey,<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      byte[] endKey, R responsePrototype, Batch.Callback&lt;R&gt; callback)<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      throws ServiceException, Throwable {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    throw new NotImplementedException("Add an implementation!");<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  }<a name="line.788"></a>
+<span class="sourceLineNo">789</span><a name="line.789"></a>
+<span class="sourceLineNo">790</span>  /**<a name="line.790"></a>
+<span class="sourceLineNo">791</span>   * Atomically checks if a row/family/qualifier value matches the expected value.<a name="line.791"></a>
+<span class="sourceLineNo">792</span>   * If it does, it performs the row mutations.  If the passed value is null, the check<a name="line.792"></a>
+<span class="sourceLineNo">793</span>   * is for the lack of column (ie: non-existence)<a name="line.793"></a>
+<span class="sourceLineNo">794</span>   *<a name="line.794"></a>
+<span class="sourceLineNo">795</span>   * The expected value argument of this call is on the left and the current<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * value of the cell is on the right side of the comparison operator.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   *<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   * Ie. eg. GREATER operator means expected value &gt; existing &lt;=&gt; perform row mutations.<a name="line.798"></a>
+<span class="sourceLineNo">799</span>   *<a name="line.799"></a>
+<span class="sourceLineNo">800</span>   * @param row to check<a name="line.800"></a>
+<span class="sourceLineNo">801</span>   * @param family column family to check<a name="line.801"></a>
+<span class="sourceLineNo">802</span>   * @param qualifier column qualifier to check<a name="line.802"></a>
+<span class="sourceLineNo">803</span>   * @param compareOp the comparison operator<a name="line.803"></a>
+<span class="sourceLineNo">804</span>   * @param value the expected value<a name="line.804"></a>
+<span class="sourceLineNo">805</span>   * @param mutation  mutations to perform if check succeeds<a name="line.805"></a>
+<span class="sourceLineNo">806</span>   * @throws IOException e<a name="line.806"></a>
+<span class="sourceLineNo">807</span>   * @return true if the new put was executed, false otherwise<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @deprecated Since 2.0.0. Will be removed in 3.0.0. Use {@link #checkAndMutate(byte[], byte[])}<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   */<a name="line.809"></a>
+<span class="sourceLineNo">810</span>  @Deprecated<a name="line.810"></a>
+<span class="sourceLineNo">811</span>  default boolean checkAndMutate(byte[] row, byte[] family, byte[] qualifier,<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      CompareFilter.CompareOp compareOp, byte[] value, RowMutations mutation) throws IOException {<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    throw new NotImplementedException("Add an implementation!");<a name="line.813"></a>
+<span class="sourceLineNo">814</span>  }<a name="line.814"></a>
+<span class="sourceLineNo">815</span><a name="line.815"></a>
+<span class="sourceLineNo">816</span>  /**<a name="line.816"></a>
+<span class="sourceLineNo">817</span>   * Atomically checks if a row/family/qualifier value matches the expected value.<a name="line.817"></a>
+<span class="sourceLineNo">818</span>   * If it does, it performs the row mutations.  If the passed value is null, the check<a name="line.818"></a>
+<span class="sourceLineNo">819</span>   * is for the lack of column (ie: non-existence)<a name="line.819"></a>
+<span class="sourceLineNo">820</span>   *<a name="line.820"></a>
+<span class="sourceLineNo">821</span>   * The expected value argument of this call is on the left and the current<a name="line.821"></a>
+<span class="sourceLineNo">822</span>   * value of the cell is on the right side of the comparison operator.<a name="line.822"></a>
+<span class="sourceLineNo">823</span>   *<a name="line.823"></a>
+<span class="sourceLineNo">824</span>   * Ie. eg. GREATER operator means expected value &gt; existing &lt;=&gt; perform row mutations.<a name="line.824"></a>
+<span class="sourceLineNo">825</span>   *<a name="line.825"></a>
+<span class="sourceLineNo">826</span>   * @param row to check<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * @param family column family to check<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   * @param qualifier column qualifier to check<a name="line.828"></a>
+<span class="sourceLineNo">829</span>   * @param op the comparison operator<a name="line.829"></a>
+<span class="sourceLineNo">830</span>   * @param value the expected value<a name="line.830"></a>
+<span class="sourceLineNo">831</span>   * @param mutation  mutations to perform if check succeeds<a name="line.831"></a>
+<span class="sourceLineNo">832</span>   * @throws IOException e<a name="line.832"></a>
+<span class="sourceLineNo">833</span>   * @return true if the new put was executed, false otherwise<a name="line.833"></a>
+<span class="sourceLineNo">834</span>   * @deprecated Since 2.0.0. Will be removed in 3.0.0. Use {@link #checkAndMutate(byte[], byte[])}<a name="line.834"></a>
+<span class="sourceLineNo">835</span>   */<a name="line.835"></a>
+<span class="sourceLineNo">836</span>  @Deprecated<a name="line.836"></a>
+<span class="sourceLineNo">837</span>  default boolean checkAndMutate(byte[] row, byte[] family, byte[] qualifier, CompareOperator op,<a name="line.837"></a>
+<span class="sourceLineNo">838</span>                         byte[] value, RowMutations mutation) throws IOException {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    throw new NotImplementedException("Add an implementation!");<a name="line.839"></a>
+<span class="sourceLineNo">840</span>  }<a name="line.840"></a>
+<span class="sourceLineNo">841</span><a name="line.841"></a>
+<span class="sourceLineNo">842</span>  /**<a name="line.842"></a>
+<span class="sourceLineNo">843</span>   * Get timeout of each rpc request in this Table instance. It will be overridden by a more<a name="line.843"></a>
+<span class="sourceLineNo">844</span>   * specific rpc timeout config such as readRpcTimeout or writeRpcTimeout.<a name="line.844"></a>
+<span class="sourceLineNo">845</span>   * @see #getReadRpcTimeout(TimeUnit)<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * @see #getWriteRpcTimeout(TimeUnit)<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   * @param unit the unit of time the timeout to be represented in<a name="line.847"></a>
+<span class="sourceLineNo">848</span>   * @return rpc timeout in the specified time unit<a name="line.848"></a>
+<span class="sourceLineNo">849</span>   */<a name="line.849"></a>
+<span class="sourceLineNo">850</span>  default long getRpcTimeout(TimeUnit unit) {<a name="line.850"></a>
+<span class="sourceLineNo">851</span>    throw new NotImplementedException("Add an implementation!");<a name="line.851"></a>
+<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
+<span class="sourceLineNo">853</span><a name="line.853"></a>
+<span class="sourceLineNo">854</span>  /**<a name="line.854"></a>
+<span class="sourceLineNo">855</span>   * Get timeout (millisecond) of each rpc request in this Table instance.<a name="line.855"></a>
+<span class="sourceLineNo">856</span>   *<a name="line.856"></a>
+<span class="sourceLineNo">857</span>   * @return Currently configured read timeout<a name="line.857"></a>
+<span class="sourceLineNo">858</span>   * @deprecated use {@link #getReadRpcTimeout(TimeUnit)} or<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   *             {@link #getWriteRpcTimeout(TimeUnit)} instead<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   */<a name="line.860"></a>
+<span class="sourceLineNo">861</span>  @Deprecated<a name="line.861"></a>
+<span class="sourceLineNo">862</span>  default int getRpcTimeout() {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>    return (int)getRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.863"></a>
+<span class="sourceLineNo">864</span>  }<a name="line.864"></a>
+<span class="sourceLineNo">865</span><a name="line.865"></a>
+<span class="sourceLineNo">866</span>  /**<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * Set timeout (millisecond) of each rpc request in operations of this Table instance, will<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * override the value of hbase.rpc.timeout in configuration.<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   * If a rpc request waiting too long, it will stop waiting and send a new request to retry until<a name="line.869"></a>
+<span class="sourceLineNo">870</span>   * retries exhausted or operation timeout reached.<a name="line.870"></a>
+<span class="sourceLineNo">871</span>   * &lt;p&gt;<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * NOTE: This will set both the read and write timeout settings to the provided value.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   *<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * @param rpcTimeout the timeout of each rpc request in millisecond.<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   *<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @deprecated Use setReadRpcTimeout or setWriteRpcTimeout instead<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   */<a name="line.877"></a>
+<span class="sourceLineNo">878</span>  @Deprecated<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  default void setRpcTimeout(int rpcTimeout) {<a name="line.879"></a>
+<span class="sourceLineNo">880</span>    setReadRpcTimeout(rpcTimeout);<a name="line.880"></a>
+<span class="sourceLineNo">881</span>    setWriteRpcTimeout(rpcTimeout);<a name="line.881"></a>
+<span class="sourceLineNo">882</span>  }<a name="line.882"></a>
+<span class="sourceLineNo">883</span><a name="line.883"></a>
+<span class="sourceLineNo">884</span>  /**<a name="line.884"></a>
+<span class="sourceLineNo">885</span>   * Get timeout of each rpc read request in this Table instance.<a name="line.885"></a>
+<span class="sourceLineNo">886</span>   * @param unit the unit of time the timeout to be represented in<a name="line.886"></a>
+<span class="sourceLineNo">887</span>   * @return read rpc timeout in the specified time unit<a name="line.887"></a>
+<span class="sourceLineNo">888</span>   */<a name="line.888"></a>
+<span class="sourceLineNo">889</span>  default long getReadRpcTimeout(TimeUnit unit) {<a name="line.889"></a>
+<span class="sourceLineNo">890</span>    throw new NotImplementedException("Add an implementation!");<a name="line.890"></a>
+<span class="sourceLineNo">891</span>  }<a name="line.891"></a>
+<span class="sourceLineNo">892</span><a name="line.892"></a>
+<span class="sourceLineNo">893</span>  /**<a name="line.893"></a>
+<span class="sourceLineNo">894</span>   * Get timeout (millisecond) of each rpc read request in this Table instance.<a name="line.894"></a>
+<span class="sourceLineNo">895</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.895"></a>
+<span class="sourceLineNo">896</span>   *             use {@link #getReadRpcTimeout(TimeUnit)} instead<a name="line.896"></a>
+<span class="sourceLineNo">897</span>   */<a name="line.897"></a>
+<span class="sourceLineNo">898</span>  @Deprecated<a name="line.898"></a>
+<span class="sourceLineNo">899</span>  default int getReadRpcTimeout() {<a name="line.899"></a>
+<span class="sourceLineNo">900</span>    return (int)getReadRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.900"></a>
+<span class="sourceLineNo">901</span>  }<a name="line.901"></a>
+<span class="sourceLineNo">902</span><a name="line.902"></a>
+<span class="sourceLineNo">903</span>  /**<a name="line.903"></a>
+<span class="sourceLineNo">904</span>   * Set timeout (millisecond) of each rpc read request in operations of this Table instance, will<a name="line.904"></a>
+<span class="sourceLineNo">905</span>   * override the value of hbase.rpc.read.timeout in configuration.<a name="line.905"></a>
+<span class="sourceLineNo">906</span>   * If a rpc read request waiting too long, it will stop waiting and send a new request to retry<a name="line.906"></a>
+<span class="sourceLineNo">907</span>   * until retries exhausted or operation timeout reached.<a name="line.907"></a>
+<span class="sourceLineNo">908</span>   *<a name="line.908"></a>
+<span class="sourceLineNo">909</span>   * @param readRpcTimeout the timeout for read rpc request in milliseconds<a name="line.909"></a>
+<span class="sourceLineNo">910</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setReadRpcTimeout} instead<a name="line.910"></a>
+<span class="sourceLineNo">911</span>   */<a name="line.911"></a>
+<span class="sourceLineNo">912</span>  @Deprecated<a name="line.912"></a>
+<span class="sourceLineNo">913</span>  default void setReadRpcTimeout(int readRpcTimeout) {<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    throw new NotImplementedException("Add an implementation!");<a name="line.914"></a>
+<span class="sourceLineNo">915</span>  }<a name="line.915"></a>
+<span class="sourceLineNo">916</span><a name="line.916"></a>
+<span class="sourceLineNo">917</span>  /**<a name="line.917"></a>
+<span class="sourceLineNo">918</span>   * Get timeout of each rpc write request in this Table instance.<a name="line.918"></a>
+<span class="sourceLineNo">919</span>   * @param unit the unit of time the timeout to be represented in<a name="line.919"></a>
+<span class="sourceLineNo">920</span>   * @return write rpc timeout in the specified time unit<a name="line.920"></a>
+<span class="sourceLineNo">921</span>   */<a name="line.921"></a>
+<span class="sourceLineNo">922</span>  default long getWriteRpcTimeout(TimeUnit unit) {<a name="line.922"></a>
+<span class="sourceLineNo">923</span>    throw new NotImplementedException("Add an implementation!");<a name="line.923"></a>
+<span class="sourceLineNo">924</span>  }<a name="line.924"></a>
+<span class="sourceLineNo">925</span><a name="line.925"></a>
+<span class="sourceLineNo">926</span>  /**<a name="line.926"></a>
+<span class="sourceLineNo">927</span>   * Get timeout (millisecond) of each rpc write request in this Table instance.<a name="line.927"></a>
+<span class="sourceLineNo">928</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.928"></a>
+<span class="sourceLineNo">929</span>   *             use {@link #getWriteRpcTimeout(TimeUnit)} instead<a name="line.929"></a>
+<span class="sourceLineNo">930</span>   */<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  @Deprecated<a name="line.931"></a>
+<span class="sourceLineNo">932</span>  default int getWriteRpcTimeout() {<a name="line.932"></a>
+<span class="sourceLineNo">933</span>    return (int)getWriteRpcTimeout(TimeUnit.MILLISECONDS);<a name="line.933"></a>
+<span class="sourceLineNo">934</span>  }<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span>  /**<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   * Set timeout (millisecond) of each rpc write request in operations of this Table instance, will<a name="line.937"></a>
+<span class="sourceLineNo">938</span>   * override the value of hbase.rpc.write.timeout in configuration.<a name="line.938"></a>
+<span class="sourceLineNo">939</span>   * If a rpc write request waiting too long, it will stop waiting and send a new request to retry<a name="line.939"></a>
+<span class="sourceLineNo">940</span>   * until retries exhausted or operation timeout reached.<a name="line.940"></a>
+<span class="sourceLineNo">941</span>   *<a name="line.941"></a>
+<span class="sourceLineNo">942</span>   * @param writeRpcTimeout the timeout for write rpc request in milliseconds<a name="line.942"></a>
+<span class="sourceLineNo">943</span>   * @deprecated since 2.0.0, use {@link TableBuilder#setWriteRpcTimeout} instead<a name="line.943"></a>
+<span class="sourceLineNo">944</span>   */<a name="line.944"></a>
+<span class="sourceLineNo">945</span>  @Deprecated<a name="line.945"></a>
+<span class="sourceLineNo">946</span>  default void setWriteRpcTimeout(int writeRpcTimeout) {<a name="line.946"></a>
+<span class="sourceLineNo">947</span>    throw new NotImplementedException("Add an implementation!");<a name="line.947"></a>
+<span class="sourceLineNo">948</span>  }<a name="line.948"></a>
+<span class="sourceLineNo">949</span><a name="line.949"></a>
+<span class="sourceLineNo">950</span>  /**<a name="line.950"></a>
+<span class="sourceLineNo">951</span>   * Get timeout of each operation in Table instance.<a name="line.951"></a>
+<span class="sourceLineNo">952</span>   * @param unit the unit of time the timeout to be represented in<a name="line.952"></a>
+<span class="sourceLineNo">953</span>   * @return operation rpc timeout in the specified time unit<a name="line.953"></a>
+<span class="sourceLineNo">954</span>   */<a name="line.954"></a>
+<span class="sourceLineNo">955</span>  default long getOperationTimeout(TimeUnit unit) {<a name="line.955"></a>
+<span class="sourceLineNo">956</span>    throw new NotImplementedException("Add an implementation!");<a name="line.956"></a>
+<span class="sourceLineNo">957</span>  }<a name="line.957"></a>
+<span class="sourceLineNo">958</span><a name="line.958"></a>
+<span class="sourceLineNo">959</span>  /**<a name="line.959"></a>
+<span class="sourceLineNo">960</span>   * Get timeout (millisecond) of each operation for in Table instance.<a name="line.960"></a>
+<span class="sourceLineNo">961</span>   * @deprecated since 2.0 and will be removed in 3.0 version<a name="line.961"></a>
+<span class="sourceLineNo">962</span>   *             use {@link #getOperationTimeout(TimeUnit)} instead<a name="line.962"></a>
+<span class="sourceLineNo">963</span>   */<a name="line.963"></a>
+<span class="so

<TRUNCATED>

[30/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"></a>
+<span class="

<TRUNCATED>

[09/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.SequentialReadTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.SequentialReadTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.SequentialReadTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.SequentialReadTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.SequentialReadTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&

<TRUNCATED>

[24/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CmdDescriptor.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"

<TRUNCATED>

[22/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.EvaluationMapTask.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.EvaluationMapTask.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.EvaluationMapTask.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.EvaluationMapTask.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.EvaluationMapTask.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;")

<TRUNCATED>

[43/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.


Project: http://git-wip-us.apache.org/repos/asf/hbase-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase-site/commit/e312f773
Tree: http://git-wip-us.apache.org/repos/asf/hbase-site/tree/e312f773
Diff: http://git-wip-us.apache.org/repos/asf/hbase-site/diff/e312f773

Branch: refs/heads/asf-site
Commit: e312f7735bda50a725cefe3cae90478250171808
Parents: be23722
Author: jenkins <bu...@apache.org>
Authored: Mon Aug 27 14:46:55 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Mon Aug 27 14:46:55 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    4 +-
 .../org/apache/hadoop/hbase/client/Table.html   |   51 +-
 .../hadoop/hbase/rest/client/RemoteHTable.html  |    3 +-
 .../org/apache/hadoop/hbase/client/Table.html   |  839 ++++++-----
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       |   38 +-
 coc.html                                        |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/constant-values.html                 |    6 +-
 .../org/apache/hadoop/hbase/client/HTable.html  |    3 +-
 .../org/apache/hadoop/hbase/client/Table.html   |   51 +-
 .../hadoop/hbase/rest/client/RemoteHTable.html  |    3 +-
 .../org/apache/hadoop/hbase/Version.html        |    6 +-
 .../client/Table.CheckAndMutateBuilder.html     |  839 ++++++-----
 .../org/apache/hadoop/hbase/client/Table.html   |  839 ++++++-----
 downloads.html                                  |    4 +-
 export_control.html                             |    4 +-
 index.html                                      |    4 +-
 integration.html                                |    4 +-
 issue-tracking.html                             |    4 +-
 license.html                                    |    4 +-
 mail-lists.html                                 |    4 +-
 metrics.html                                    |    4 +-
 old_news.html                                   |    4 +-
 plugin-management.html                          |    4 +-
 plugins.html                                    |    4 +-
 poweredbyhbase.html                             |    4 +-
 project-info.html                               |    4 +-
 project-reports.html                            |    4 +-
 project-summary.html                            |    4 +-
 pseudo-distributed.html                         |    4 +-
 replication.html                                |    4 +-
 resources.html                                  |    4 +-
 source-repository.html                          |    4 +-
 sponsors.html                                   |    4 +-
 supportingprojects.html                         |    4 +-
 team-list.html                                  |    4 +-
 .../PerformanceEvaluation.FilteredScanTest.html |    4 +-
 .../hadoop/hbase/PerformanceEvaluation.html     |   38 +-
 .../hbase/util/TestHBaseFsckReplication.html    |    4 +-
 .../hbase/PerformanceEvaluation.AppendTest.html | 1362 +++++++++---------
 ...rformanceEvaluation.AsyncRandomReadTest.html | 1362 +++++++++---------
 ...formanceEvaluation.AsyncRandomWriteTest.html | 1362 +++++++++---------
 .../PerformanceEvaluation.AsyncScanTest.html    | 1362 +++++++++---------
 ...manceEvaluation.AsyncSequentialReadTest.html | 1362 +++++++++---------
 ...anceEvaluation.AsyncSequentialWriteTest.html | 1362 +++++++++---------
 .../PerformanceEvaluation.AsyncTableTest.html   | 1362 +++++++++---------
 .../hbase/PerformanceEvaluation.AsyncTest.html  | 1362 +++++++++---------
 ...rformanceEvaluation.BufferedMutatorTest.html | 1362 +++++++++---------
 .../PerformanceEvaluation.CASTableTest.html     | 1362 +++++++++---------
 ...erformanceEvaluation.CheckAndDeleteTest.html | 1362 +++++++++---------
 ...erformanceEvaluation.CheckAndMutateTest.html | 1362 +++++++++---------
 .../PerformanceEvaluation.CheckAndPutTest.html  | 1362 +++++++++---------
 .../PerformanceEvaluation.CmdDescriptor.html    | 1362 +++++++++---------
 .../hbase/PerformanceEvaluation.Counter.html    | 1362 +++++++++---------
 ...PerformanceEvaluation.EvaluationMapTask.html | 1362 +++++++++---------
 .../PerformanceEvaluation.FilteredScanTest.html | 1362 +++++++++---------
 .../PerformanceEvaluation.IncrementTest.html    | 1362 +++++++++---------
 .../PerformanceEvaluation.RandomReadTest.html   | 1362 +++++++++---------
 ...Evaluation.RandomScanWithRange10000Test.html | 1362 +++++++++---------
 ...eEvaluation.RandomScanWithRange1000Test.html | 1362 +++++++++---------
 ...ceEvaluation.RandomScanWithRange100Test.html | 1362 +++++++++---------
 ...nceEvaluation.RandomScanWithRange10Test.html | 1362 +++++++++---------
 ...manceEvaluation.RandomScanWithRangeTest.html | 1362 +++++++++---------
 ...erformanceEvaluation.RandomSeekScanTest.html | 1362 +++++++++---------
 .../PerformanceEvaluation.RandomWriteTest.html  | 1362 +++++++++---------
 .../hbase/PerformanceEvaluation.RunResult.html  | 1362 +++++++++---------
 .../hbase/PerformanceEvaluation.ScanTest.html   | 1362 +++++++++---------
 ...erformanceEvaluation.SequentialReadTest.html | 1362 +++++++++---------
 ...rformanceEvaluation.SequentialWriteTest.html | 1362 +++++++++---------
 .../hbase/PerformanceEvaluation.Status.html     | 1362 +++++++++---------
 .../hbase/PerformanceEvaluation.TableTest.html  | 1362 +++++++++---------
 .../hbase/PerformanceEvaluation.Test.html       | 1362 +++++++++---------
 .../hbase/PerformanceEvaluation.TestBase.html   | 1362 +++++++++---------
 .../PerformanceEvaluation.TestOptions.html      | 1362 +++++++++---------
 .../hadoop/hbase/PerformanceEvaluation.html     | 1362 +++++++++---------
 .../hbase/util/TestHBaseFsckReplication.html    |  113 +-
 82 files changed, 26064 insertions(+), 25927 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 6877f6e..8e9d4eb 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180826" />
+    <meta name="Date-Revision-yyyymmdd" content="20180827" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -601,7 +601,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-08-26</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-08-27</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index fb6e68d..59f0335 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20180826142957+00'00')
-/CreationDate (D:20180826144349+00'00')
+/ModDate (D:20180827142953+00'00')
+/CreationDate (D:20180827144340+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/apidocs/org/apache/hadoop/hbase/client/Table.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/Table.html b/apidocs/org/apache/hadoop/hbase/client/Table.html
index be2fe54..9c2cd5b 100644
--- a/apidocs/org/apache/hadoop/hbase/client/Table.html
+++ b/apidocs/org/apache/hadoop/hbase/client/Table.html
@@ -1236,7 +1236,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>default&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.571">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append)
+<pre>default&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.570">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Appends values to one or more columns within a single row.
  <p>
@@ -1245,8 +1245,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
  readers are guaranteed to see this operation fully completed.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>append</code> - object that specifies the columns and amounts to be used
-                  for the increment operations</dd>
+<dd><code>append</code> - object that specifies the columns and values to be appended</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>values of columns after the append operation (maybe null)</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1260,7 +1259,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>increment</h4>
-<pre>default&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.587">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment)
+<pre>default&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.586">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Increments one or more columns within a single row.
  <p>
@@ -1284,7 +1283,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementColumnValue</h4>
-<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.603">incrementColumnValue</a>(byte[]&nbsp;row,
+<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.602">incrementColumnValue</a>(byte[]&nbsp;row,
                                   byte[]&nbsp;family,
                                   byte[]&nbsp;qualifier,
                                   long&nbsp;amount)
@@ -1312,7 +1311,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementColumnValue</h4>
-<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.627">incrementColumnValue</a>(byte[]&nbsp;row,
+<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.626">incrementColumnValue</a>(byte[]&nbsp;row,
                                   byte[]&nbsp;family,
                                   byte[]&nbsp;qualifier,
                                   long&nbsp;amount,
@@ -1346,7 +1345,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.642">close</a>()
+<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.641">close</a>()
             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Releases any resources held or pending changes in internal buffers.</div>
 <dl>
@@ -1365,7 +1364,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorService</h4>
-<pre>default&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.html" title="interface in org.apache.hadoop.hbase.ipc">CoprocessorRpcChannel</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.673">coprocessorService</a>(byte[]&nbsp;row)</pre>
+<pre>default&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.html" title="interface in org.apache.hadoop.hbase.ipc">CoprocessorRpcChannel</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.672">coprocessorService</a>(byte[]&nbsp;row)</pre>
 <div class="block">Creates and returns a <code>RpcChannel</code> instance connected to the
  table region containing the specified row.  The row given does not actually have
  to exist.  Whichever region would contain the row based on start and end keys will
@@ -1402,7 +1401,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorService</h4>
-<pre>default&nbsp;&lt;T extends com.google.protobuf.Service,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.697">coprocessorService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;service,
+<pre>default&nbsp;&lt;T extends com.google.protobuf.Service,R&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.696">coprocessorService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;service,
                                                                                    byte[]&nbsp;startKey,
                                                                                    byte[]&nbsp;endKey,
                                                                                    org.apache.hadoop.hbase.client.coprocessor.Batch.Call&lt;T,R&gt;&nbsp;callable)
@@ -1440,7 +1439,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorService</h4>
-<pre>default&nbsp;&lt;T extends com.google.protobuf.Service,R&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.727">coprocessorService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;service,
+<pre>default&nbsp;&lt;T extends com.google.protobuf.Service,R&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.726">coprocessorService</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;service,
                                                                           byte[]&nbsp;startKey,
                                                                           byte[]&nbsp;endKey,
                                                                           org.apache.hadoop.hbase.client.coprocessor.Batch.Call&lt;T,R&gt;&nbsp;callable,
@@ -1484,7 +1483,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>batchCoprocessorService</h4>
-<pre>default&nbsp;&lt;R extends com.google.protobuf.Message&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.755">batchCoprocessorService</a>(com.google.protobuf.Descriptors.MethodDescriptor&nbsp;methodDescriptor,
+<pre>default&nbsp;&lt;R extends com.google.protobuf.Message&gt;&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],R&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.754">batchCoprocessorService</a>(com.google.protobuf.Descriptors.MethodDescriptor&nbsp;methodDescriptor,
                                                                                       com.google.protobuf.Message&nbsp;request,
                                                                                       byte[]&nbsp;startKey,
                                                                                       byte[]&nbsp;endKey,
@@ -1522,7 +1521,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>batchCoprocessorService</h4>
-<pre>default&nbsp;&lt;R extends com.google.protobuf.Message&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.784">batchCoprocessorService</a>(com.google.protobuf.Descriptors.MethodDescriptor&nbsp;methodDescriptor,
+<pre>default&nbsp;&lt;R extends com.google.protobuf.Message&gt;&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.783">batchCoprocessorService</a>(com.google.protobuf.Descriptors.MethodDescriptor&nbsp;methodDescriptor,
                                                                              com.google.protobuf.Message&nbsp;request,
                                                                              byte[]&nbsp;startKey,
                                                                              byte[]&nbsp;endKey,
@@ -1565,7 +1564,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <li class="blockList">
 <h4>checkAndMutate</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.812">checkAndMutate</a>(byte[]&nbsp;row,
+default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.811">checkAndMutate</a>(byte[]&nbsp;row,
                                            byte[]&nbsp;family,
                                            byte[]&nbsp;qualifier,
                                            <a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter">CompareFilter.CompareOp</a>&nbsp;compareOp,
@@ -1603,7 +1602,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <li class="blockList">
 <h4>checkAndMutate</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.838">checkAndMutate</a>(byte[]&nbsp;row,
+default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.837">checkAndMutate</a>(byte[]&nbsp;row,
                                            byte[]&nbsp;family,
                                            byte[]&nbsp;qualifier,
                                            <a href="../../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase">CompareOperator</a>&nbsp;op,
@@ -1640,7 +1639,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcTimeout</h4>
-<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.851">getRpcTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
+<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.850">getRpcTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
 <div class="block">Get timeout of each rpc request in this Table instance. It will be overridden by a more
  specific rpc timeout config such as readRpcTimeout or writeRpcTimeout.</div>
 <dl>
@@ -1661,7 +1660,7 @@ default&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <li class="blockList">
 <h4>getRpcTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.863">getRpcTimeout</a>()</pre>
+default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.862">getRpcTimeout</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">use <a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getReadRpcTimeout-java.util.concurrent.TimeUnit-"><code>getReadRpcTimeout(TimeUnit)</code></a> or
              <a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getWriteRpcTimeout-java.util.concurrent.TimeUnit-"><code>getWriteRpcTimeout(TimeUnit)</code></a> instead</span></div>
 <div class="block">Get timeout (millisecond) of each rpc request in this Table instance.</div>
@@ -1678,7 +1677,7 @@ default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/c
 <li class="blockList">
 <h4>setRpcTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.880">setRpcTimeout</a>(int&nbsp;rpcTimeout)</pre>
+default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.879">setRpcTimeout</a>(int&nbsp;rpcTimeout)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Use setReadRpcTimeout or setWriteRpcTimeout instead</span></div>
 <div class="block">Set timeout (millisecond) of each rpc request in operations of this Table instance, will
  override the value of hbase.rpc.timeout in configuration.
@@ -1698,7 +1697,7 @@ default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <ul class="blockList">
 <li class="blockList">
 <h4>getReadRpcTimeout</h4>
-<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.890">getReadRpcTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
+<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.889">getReadRpcTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
 <div class="block">Get timeout of each rpc read request in this Table instance.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1715,7 +1714,7 @@ default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <li class="blockList">
 <h4>getReadRpcTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.900">getReadRpcTimeout</a>()</pre>
+default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.899">getReadRpcTimeout</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0 and will be removed in 3.0 version
              use <a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getReadRpcTimeout-java.util.concurrent.TimeUnit-"><code>getReadRpcTimeout(TimeUnit)</code></a> instead</span></div>
 <div class="block">Get timeout (millisecond) of each rpc read request in this Table instance.</div>
@@ -1728,7 +1727,7 @@ default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/c
 <li class="blockList">
 <h4>setReadRpcTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.914">setReadRpcTimeout</a>(int&nbsp;readRpcTimeout)</pre>
+default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.913">setReadRpcTimeout</a>(int&nbsp;readRpcTimeout)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0, use <a href="../../../../../org/apache/hadoop/hbase/client/TableBuilder.html#setReadRpcTimeout-int-"><code>TableBuilder.setReadRpcTimeout(int)</code></a> instead</span></div>
 <div class="block">Set timeout (millisecond) of each rpc read request in operations of this Table instance, will
  override the value of hbase.rpc.read.timeout in configuration.
@@ -1746,7 +1745,7 @@ default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriteRpcTimeout</h4>
-<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.923">getWriteRpcTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
+<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.922">getWriteRpcTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
 <div class="block">Get timeout of each rpc write request in this Table instance.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1763,7 +1762,7 @@ default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <li class="blockList">
 <h4>getWriteRpcTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.933">getWriteRpcTimeout</a>()</pre>
+default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.932">getWriteRpcTimeout</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0 and will be removed in 3.0 version
              use <a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getWriteRpcTimeout-java.util.concurrent.TimeUnit-"><code>getWriteRpcTimeout(TimeUnit)</code></a> instead</span></div>
 <div class="block">Get timeout (millisecond) of each rpc write request in this Table instance.</div>
@@ -1776,7 +1775,7 @@ default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/c
 <li class="blockList">
 <h4>setWriteRpcTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.947">setWriteRpcTimeout</a>(int&nbsp;writeRpcTimeout)</pre>
+default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.946">setWriteRpcTimeout</a>(int&nbsp;writeRpcTimeout)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0, use <a href="../../../../../org/apache/hadoop/hbase/client/TableBuilder.html#setWriteRpcTimeout-int-"><code>TableBuilder.setWriteRpcTimeout(int)</code></a> instead</span></div>
 <div class="block">Set timeout (millisecond) of each rpc write request in operations of this Table instance, will
  override the value of hbase.rpc.write.timeout in configuration.
@@ -1794,7 +1793,7 @@ default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <ul class="blockList">
 <li class="blockList">
 <h4>getOperationTimeout</h4>
-<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.956">getOperationTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
+<pre>default&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.955">getOperationTimeout</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;unit)</pre>
 <div class="block">Get timeout of each operation in Table instance.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1811,7 +1810,7 @@ default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/
 <li class="blockList">
 <h4>getOperationTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.966">getOperationTimeout</a>()</pre>
+default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.965">getOperationTimeout</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0 and will be removed in 3.0 version
              use <a href="../../../../../org/apache/hadoop/hbase/client/Table.html#getOperationTimeout-java.util.concurrent.TimeUnit-"><code>getOperationTimeout(TimeUnit)</code></a> instead</span></div>
 <div class="block">Get timeout (millisecond) of each operation for in Table instance.</div>
@@ -1824,7 +1823,7 @@ default&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/c
 <li class="blockList">
 <h4>setOperationTimeout</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.982">setOperationTimeout</a>(int&nbsp;operationTimeout)</pre>
+default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Table.html#line.981">setOperationTimeout</a>(int&nbsp;operationTimeout)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0, use <a href="../../../../../org/apache/hadoop/hbase/client/TableBuilder.html#setOperationTimeout-int-"><code>TableBuilder.setOperationTimeout(int)</code></a> instead</span></div>
 <div class="block">Set timeout (millisecond) of each operation in this Table instance, will override the value
  of hbase.client.operation.timeout in configuration.

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/apidocs/org/apache/hadoop/hbase/rest/client/RemoteHTable.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/rest/client/RemoteHTable.html b/apidocs/org/apache/hadoop/hbase/rest/client/RemoteHTable.html
index 1533d42..3247ca0 100644
--- a/apidocs/org/apache/hadoop/hbase/rest/client/RemoteHTable.html
+++ b/apidocs/org/apache/hadoop/hbase/rest/client/RemoteHTable.html
@@ -1479,8 +1479,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/h
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/client/Table.html#append-org.apache.hadoop.hbase.client.Append-">append</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a></code></dd>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>append</code> - object that specifies the columns and amounts to be used
-                  for the increment operations</dd>
+<dd><code>append</code> - object that specifies the columns and values to be appended</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>values of columns after the append operation (maybe null)</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>


[28/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CASTableTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"></a>

<TRUNCATED>

[18/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomScanWithRange10000Test.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;

<TRUNCATED>

[06/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TableTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"></a>
+<span class="

<TRUNCATED>

[03/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"></a>
+<sp

<TRUNCATED>

[25/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndPutTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="

<TRUNCATED>

[33/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialReadTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;

<TRUNCATED>

[11/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RunResult.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RunResult.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RunResult.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RunResult.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RunResult.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"></a>
+<span class="

<TRUNCATED>

[26/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndMutateTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&

<TRUNCATED>

[32/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncSequentialWriteTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]*

<TRUNCATED>

[35/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncRandomWriteTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt

<TRUNCATED>

[31/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.AsyncTableTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.

<TRUNCATED>

[12/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomWriteTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="

<TRUNCATED>

[02/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>    System.err.println();

<TRUNCATED>

[13/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomSeekScanTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&

<TRUNCATED>

[19/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.RandomReadTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.

<TRUNCATED>

[27/43] hbase-site git commit: Published site at 993e74b7471a7fe483eae59ab198bb2533c55031.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/e312f773/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html
index e38835a..e11b644 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/PerformanceEvaluation.CheckAndDeleteTest.html
@@ -2220,698 +2220,702 @@
 <span class="sourceLineNo">2212</span><a name="line.2212"></a>
 <span class="sourceLineNo">2213</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2213"></a>
 <span class="sourceLineNo">2214</span>      super(con, options, status);<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    }<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span><a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    @Override<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    boolean testRow(int i) throws IOException {<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Scan scan = constructScan(value);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      ResultScanner scanner = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>      try {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>        scanner = this.table.getScanner(scan);<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>          updateValueSize(r);<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        }<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      } finally {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>        if (scanner != null) {<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          scanner.close();<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      return true;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>      FilterList list = new FilterList();<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      list.addFilter(filter);<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      if (opts.filterAll) {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        list.addFilter(new FilterAllFilter());<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          .setScanMetricsEnabled(true);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      if (opts.addColumns) {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>      } else {<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>      scan.setFilter(list);<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>      return scan;<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>  /**<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   * Compute a throughput rate in MB/s.<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * @param rows Number of records consumed.<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * @param timeMs Time taken in milliseconds.<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   */<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    return FMT.format(mbps) + " MB/s";<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>  }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>  /*<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   * Format passed integer.<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>   * @param number<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>   * number (Does absolute in case number is negative).<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>   */<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public static byte [] format(final int number) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>    int d = Math.abs(number);<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      d /= 10;<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    return b;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span><a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>  /*<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   * consumes about 30% of CPU time.<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   * @return Generated random value to insert into a table cell.<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   */<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    byte [] b = new byte [length];<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    int i;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span><a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      b[i+1] = b[i];<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      b[i+2] = b[i];<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      b[i+3] = b[i];<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>      b[i+4] = b[i];<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      b[i+5] = b[i];<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>      b[i+6] = b[i];<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      b[i+7] = b[i];<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span><a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    for(; i &lt; length; i++) {<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      b[i] = a;<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>    return b;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    return format(generateRandomRow(random, totalRows));<a name="line.2320"></a>
+<span class="sourceLineNo">2215</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB +<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>                ". This could take a very long time.");<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span><a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    @Override<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean testRow(int i) throws IOException {<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      Scan scan = constructScan(value);<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>      ResultScanner scanner = null;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>      try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>        scanner = this.table.getScanner(scan);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          updateValueSize(r);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        }<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>      } finally {<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        if (scanner != null) {<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>          scanner.close();<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>        }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      return true;<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    }<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span><a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      FilterList list = new FilterList();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      list.addFilter(filter);<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      if (opts.filterAll) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>        list.addFilter(new FilterAllFilter());<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>      }<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>          .setScanMetricsEnabled(true);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>      if (opts.addColumns) {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      } else {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>      }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>      scan.setFilter(list);<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>      return scan;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    }<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  }<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span><a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>  /**<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>   * Compute a throughput rate in MB/s.<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * @param rows Number of records consumed.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param timeMs Time taken in milliseconds.<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   */<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    return FMT.format(mbps) + " MB/s";<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span><a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  /*<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>   * Format passed integer.<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>   * @param number<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * number (Does absolute in case number is negative).<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  public static byte [] format(final int number) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>    int d = Math.abs(number);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>      d /= 10;<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>    return b;<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  }<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span><a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  /*<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * This method takes some time and is done inline uploading data.  For<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   * consumes about 30% of CPU time.<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   * @return Generated random value to insert into a table cell.<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   */<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>    byte [] b = new byte [length];<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    int i;<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span><a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>      b[i+1] = b[i];<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>      b[i+2] = b[i];<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>      b[i+3] = b[i];<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>      b[i+4] = b[i];<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>      b[i+5] = b[i];<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>      b[i+6] = b[i];<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      b[i+7] = b[i];<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span><a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>    for(; i &lt; length; i++) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      b[i] = a;<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return b;<a name="line.2320"></a>
 <span class="sourceLineNo">2321</span>  }<a name="line.2321"></a>
 <span class="sourceLineNo">2322</span><a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2324"></a>
+<span class="sourceLineNo">2323</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    return format(generateRandomRow(random, totalRows));<a name="line.2324"></a>
 <span class="sourceLineNo">2325</span>  }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      throws IOException, InterruptedException {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>        + opts.perClientRunRows + " rows");<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    long totalElapsedTime;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>    final TestBase t;<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>    try {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>      } else {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>        t = constructor.newInstance(con, opts, status);<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>      }<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    } catch (NoSuchMethodException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          + ".  It does not provide a constructor as described by "<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>    } catch (Exception e) {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>    }<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>    totalElapsedTime = t.test();<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span><a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span><a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span><a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2366"></a>
+<span class="sourceLineNo">2327</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span><a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      throws IOException, InterruptedException {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        + opts.perClientRunRows + " rows");<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    long totalElapsedTime;<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    final TestBase t;<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>    try {<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>      } else {<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>        t = constructor.newInstance(con, opts, status);<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>      }<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    } catch (NoSuchMethodException e) {<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>          + ".  It does not provide a constructor as described by "<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>    } catch (Exception e) {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>    }<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>    totalElapsedTime = t.test();<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span><a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span><a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2366"></a>
 <span class="sourceLineNo">2367</span>  }<a name="line.2367"></a>
 <span class="sourceLineNo">2368</span><a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    Admin admin = null;<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    Connection connection = null;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    try {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>      admin = connection.getAdmin();<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      checkTable(admin, opts);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } finally {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      if (admin != null) admin.close();<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      if (connection != null) connection.close();<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    }<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    if (opts.nomapred) {<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>      doLocalClients(opts, getConf());<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    } else {<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      doMapReduce(opts, getConf());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    }<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  }<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span><a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>  protected void printUsage() {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2392"></a>
+<span class="sourceLineNo">2369</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>  }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span><a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    Admin admin = null;<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    Connection connection = null;<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    try {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>      admin = connection.getAdmin();<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      checkTable(admin, opts);<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    } finally {<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      if (admin != null) admin.close();<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (connection != null) connection.close();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    }<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (opts.nomapred) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      doLocalClients(opts, getConf());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } else {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      doMapReduce(opts, getConf());<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>  }<a name="line.2393"></a>
 <span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>  protected static void printUsage(final String message) {<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2396"></a>
+<span class="sourceLineNo">2395</span>  protected void printUsage() {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    printUsage(PE_COMMAND_SHORTNAME, null);<a name="line.2396"></a>
 <span class="sourceLineNo">2397</span>  }<a name="line.2397"></a>
 <span class="sourceLineNo">2398</span><a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    printUsage(message);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    System.exit(exitCode);<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>  }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      System.err.println(message);<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>    }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    System.err.println();<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>    System.err.println("General Options:");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>      "(rather than use mapreduce)");<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        + "if not, connCount=thread number");<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span><a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>      "Default: 0");<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        " rows have been treated. Default: 0");<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>    System.err.println();<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        + " the total range specified by the size.");<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    System.err.println(<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>          + " use size to specify the end range and --rows"<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      "Default: false");<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported " +<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>        "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      "Default: false");<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>    System.err.println();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    System.err.println("Read Tests:");<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>      "by randomRead. Default: disabled");<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      "from memory.  Default: false");<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>        + Arrays.toString(BloomType.values()));<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>        + "Uses the CompactingMemstore");<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    System.err.println();<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    System.err.println("  For example: ");<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>    System.err.println();<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    System.err.println("Command:");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    System.err.println();<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>    System.err.println("Args:");<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    System.err.println("Examples:");<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>   * with these unrecognized arguments.<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>   */<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>    TestOptions opts = new TestOptions();<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span><a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>    String cmd = null;<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    while ((cmd = args.poll()) != null) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>        args.add(cmd);<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>        break;<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span><a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      final String nmr = "--nomapred";<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      if (cmd.startsWith(nmr)) {<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>        opts.nomapred = true;<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        continue;<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>      }<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span><a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>      final String rows = "--rows=";<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>      if (cmd.startsWith(rows)) {<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>        continue;<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      }<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span><a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      final String cycles = "--cycles=";<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      if (cmd.startsWith(cycles)) {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        continue;<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>      }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>      final String sampleRate = "--sampleRate=";<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>        continue;<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>      }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span><a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      final String table = "--table=";<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>      if (cmd.startsWith(table)) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>        opts.tableName = cmd.substring(table.length());<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        continue;<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span><a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      final String startRow = "--startRow=";<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>      if (cmd.startsWith(startRow)) {<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        continue;<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>      }<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span><a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>      final String compress = "--compress=";<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>      if (cmd.startsWith(compress)) {<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>        continue;<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      }<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span><a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      final String traceRate = "--traceRate=";<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>      if (cmd.startsWith(traceRate)) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>        continue;<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>      }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span><a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        continue;<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span><a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      final String flushCommits = "--flushCommits=";<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>        continue;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>      }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        continue;<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      }<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span><a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      final String presplit = "--presplit=";<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      if (cmd.startsWith(presplit)) {<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        continue;<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>      }<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span><a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      final String inMemory = "--inmemory=";<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      if (cmd.startsWith(inMemory)) {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        continue;<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span><a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      final String autoFlush = "--autoFlush=";<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>        }<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        continue;<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      }<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      final String onceCon = "--oneCon=";<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>      if (cmd.startsWith(onceCon)) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>              + "connCount should not bigger than 1");<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>        }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>        continue;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>      }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      final String connCount = "--connCount=";<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>      if (cmd.startsWith(connCount)) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>        if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>          throw new IllegalArgumentException("oneCon is set to true, "<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>              + "connCount should not bigger than 1");<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>        }<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        continue;<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      }<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span><a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      final String latency = "--latency";<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>      if (cmd.startsWith(latency)) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>        opts.reportLatency = true;<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>        continue;<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span><a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      final String multiGet = "--multiGet=";<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      if (cmd.startsWith(multiGet)) {<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        continue;<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>      }<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span><a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      final String multiPut = "--multiPut=";<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>      if (cmd.startsWith(multiPut)) {<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>          throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>        }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>        continue;<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      }<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span><a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>      final String useTags = "--usetags=";<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>      if (cmd.startsWith(useTags)) {<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>        continue;<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      }<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span><a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      final String noOfTags = "--numoftags=";<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        continue;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      }<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span><a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      final String replicas = "--replicas=";<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>      if (cmd.startsWith(replicas)) {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        continue;<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      }<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span><a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      final String filterOutAll = "--filterAll";<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        opts.filterAll = true;<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>        continue;<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span><a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      final String size = "--size=";<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>      if (cmd.startsWith(size)) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>        continue;<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span><a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        continue;<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span><a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      final String randomSleep = "--randomSleep=";<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>        continue;<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      }<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span><a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      final String measureAfter = "--measureAfter=";<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        continue;<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        continue;<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>      }<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span><a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      final String blockSize = "--blockSize=";<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span><a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      final String valueSize = "--valueSize=";<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>      if (cmd.startsWith(valueSize)) {<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>        continue;<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>      }<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span><a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final String valueRandom = "--valueRandom";<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>        opts.valueRandom = true;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        if (opts.valueZipf) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>        }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>        continue;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>      }<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span><a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>      final String valueZipf = "--valueZipf";<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>        opts.valueZipf = true;<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>        if (opts.valueRandom) {<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>        }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>        continue;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>      }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span><a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      final String period = "--period=";<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>      if (cmd.startsWith(period)) {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        continue;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>      final String addColumns = "--addColumns=";<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      if (cmd.startsWith(addColumns)) {<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>        continue;<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      }<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span><a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>        opts.inMemoryCompaction =<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>        continue;<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>      final String columns = "--columns=";<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>      if (cmd.startsWith(columns)) {<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>        continue;<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>      }<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span><a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>      final String families = "--families=";<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>      if (cmd.startsWith(families)) {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>        continue;<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      }<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span><a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      final String caching = "--caching=";<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>      if (cmd.startsWith(caching)) {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        continue;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        opts.asyncPrefetch = true;<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>        continue;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>        continue;<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      }<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span><a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      final String scanReadType = "--scanReadType=";<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>        opts.scanReadType =<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>      }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>      final String bufferSize = "--bufferSize=";<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>        continue;<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>      }<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span><a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      if (isCommandClass(cmd)) {<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        opts.cmdName = cmd;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>        }<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>        opts = calculateRowsAndSize(opts);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>        break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>      } else {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      }<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span><a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // Not matching any option or command.<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      args.add(cmd);<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      break;<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>    }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>    return opts;<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>  }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    if ((opts.getCmdName() != null<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      // total size in GB specified<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    } else {<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>    }<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>    return opts;<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>  }<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span><a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        opts.getColumns());<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>  }<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span><a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>  @Override<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>  public int run(String[] args) throws Exception {<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    // (but hopefully something not as painful as cli options).<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>    int errCode = -1;<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    if (args.length &lt; 1) {<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>      printUsage();<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>      return errCode;<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    }<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span><a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      argv.addAll(Arrays.asList(args));<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      TestOptions opts = parseOpts(argv);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span><a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // args remaining, print help and exit<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      if (!argv.isEmpty()) {<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        errCode = 0;<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        printUsage();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        return errCode;<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>      }<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span><a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      // must run at least 1 client<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>      }<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span><a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      // cmdName should not be null, print help and exit<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      if (opts.cmdName == null) {<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>        printUsage();<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>        return errCode;<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span><a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      if (cmdClass != null) {<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>        runTest(cmdClass, opts);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        errCode = 0;<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span><a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>    } catch (Exception e) {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      e.printStackTrace();<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>    }<a name="line.2888"></a>
+<span class="sourceLineNo">2399</span>  protected static void printUsage(final String message) {<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  }<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span><a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>    printUsage(message);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    System.exit(exitCode);<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>  }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span><a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>  protected static void printUsage(final String shortName, final String message) {<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>      System.err.println(message);<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    }<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&

<TRUNCATED>