<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
<span class="sourceLineNo">002</span> *<a name="line.2"></a>
<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
<span class="sourceLineNo">010</span> *<a name="line.10"></a>
<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
<span class="sourceLineNo">012</span> *<a name="line.12"></a>
<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> */<a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>import com.codahale.metrics.Histogram;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import com.codahale.metrics.UniformReservoir;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import com.fasterxml.jackson.databind.MapperFeature;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import com.fasterxml.jackson.databind.ObjectMapper;<a name="line.24"></a>
<span class="sourceLineNo">025</span><a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.io.PrintStream;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.lang.reflect.Constructor;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.math.BigDecimal;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.math.MathContext;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.text.DecimalFormat;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.text.SimpleDateFormat;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.ArrayList;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.Arrays;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.Date;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.LinkedList;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import java.util.Locale;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.util.Map;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.util.NoSuchElementException;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import java.util.Queue;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import java.util.Random;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import java.util.TreeMap;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import java.util.concurrent.Callable;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import java.util.concurrent.ExecutionException;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import java.util.concurrent.ExecutorService;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import java.util.concurrent.Executors;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import java.util.concurrent.Future;<a name="line.47"></a>
<span class="sourceLineNo">048</span><a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.commons.lang3.StringUtils;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.apache.hadoop.conf.Configuration;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.apache.hadoop.conf.Configured;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.apache.hadoop.fs.FileSystem;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.apache.hadoop.fs.Path;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.Append;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.client.AsyncConnection;<a name="line.56"></a>
<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.client.AsyncTable;<a name="line.57"></a>
<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.client.BufferedMutator;<a name="line.58"></a>
<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.client.BufferedMutatorParams;<a name="line.59"></a>
<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.60"></a>
<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.61"></a>
<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Consistency;<a name="line.62"></a>
<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.63"></a>
<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.64"></a>
<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Get;<a name="line.65"></a>
<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.66"></a>
<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Put;<a name="line.67"></a>
<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Result;<a name="line.68"></a>
<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.69"></a>
<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.70"></a>
<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.71"></a>
<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Table;<a name="line.72"></a>
<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.73"></a>
<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.filter.BinaryComparator;<a name="line.74"></a>
<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.75"></a>
<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.filter.FilterAllFilter;<a name="line.76"></a>
<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.filter.FilterList;<a name="line.77"></a>
<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.filter.PageFilter;<a name="line.78"></a>
<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;<a name="line.79"></a>
<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.filter.WhileMatchFilter;<a name="line.80"></a>
<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.81"></a>
<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.82"></a>
<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.io.hfile.RandomDistribution;<a name="line.83"></a>
<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;<a name="line.84"></a>
<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.85"></a>
<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.CompactingMemStore;<a name="line.86"></a>
<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.trace.HBaseHTraceConfiguration;<a name="line.87"></a>
<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.trace.SpanReceiverHost;<a name="line.88"></a>
<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.89"></a>
<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.ByteArrayHashKey;<a name="line.90"></a>
<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.91"></a>
<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.Hash;<a name="line.92"></a>
<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.MurmurHash;<a name="line.93"></a>
<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.94"></a>
<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.YammerHistogramUtils;<a name="line.95"></a>
<span class="sourceLineNo">096</span>import org.apache.hadoop.io.LongWritable;<a name="line.96"></a>
<span class="sourceLineNo">097</span>import org.apache.hadoop.io.Text;<a name="line.97"></a>
<span class="sourceLineNo">098</span>import org.apache.hadoop.mapreduce.Job;<a name="line.98"></a>
<span class="sourceLineNo">099</span>import org.apache.hadoop.mapreduce.Mapper;<a name="line.99"></a>
<span class="sourceLineNo">100</span>import org.apache.hadoop.mapreduce.lib.input.NLineInputFormat;<a name="line.100"></a>
<span class="sourceLineNo">101</span>import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;<a name="line.101"></a>
<span class="sourceLineNo">102</span>import org.apache.hadoop.mapreduce.lib.reduce.LongSumReducer;<a name="line.102"></a>
<span class="sourceLineNo">103</span>import org.apache.hadoop.util.Tool;<a name="line.103"></a>
<span class="sourceLineNo">104</span>import org.apache.hadoop.util.ToolRunner;<a name="line.104"></a>
<span class="sourceLineNo">105</span>import org.apache.htrace.core.ProbabilitySampler;<a name="line.105"></a>
<span class="sourceLineNo">106</span>import org.apache.htrace.core.Sampler;<a name="line.106"></a>
<span class="sourceLineNo">107</span>import org.apache.htrace.core.TraceScope;<a name="line.107"></a>
<span class="sourceLineNo">108</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.108"></a>
<span class="sourceLineNo">109</span>import org.slf4j.Logger;<a name="line.109"></a>
<span class="sourceLineNo">110</span>import org.slf4j.LoggerFactory;<a name="line.110"></a>
<span class="sourceLineNo">111</span>import org.apache.hbase.thirdparty.com.google.common.base.MoreObjects;<a name="line.111"></a>
<span class="sourceLineNo">112</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.112"></a>
<span class="sourceLineNo">113</span><a name="line.113"></a>
<span class="sourceLineNo">114</span>/**<a name="line.114"></a>
<span class="sourceLineNo">115</span> * Script used evaluating HBase performance and scalability.  Runs a HBase<a name="line.115"></a>
<span class="sourceLineNo">116</span> * client that steps through one of a set of hardcoded tests or 'experiments'<a name="line.116"></a>
<span class="sourceLineNo">117</span> * (e.g. a random reads test, a random writes test, etc.). Pass on the<a name="line.117"></a>
<span class="sourceLineNo">118</span> * command-line which test to run and how many clients are participating in<a name="line.118"></a>
<span class="sourceLineNo">119</span> * this experiment. Run {@code PerformanceEvaluation --help} to obtain usage.<a name="line.119"></a>
<span class="sourceLineNo">120</span> *<a name="line.120"></a>
<span class="sourceLineNo">121</span> * &lt;p&gt;This class sets up and runs the evaluation programs described in<a name="line.121"></a>
<span class="sourceLineNo">122</span> * Section 7, &lt;i&gt;Performance Evaluation&lt;/i&gt;, of the &lt;a<a name="line.122"></a>
<span class="sourceLineNo">123</span> * href="http://labs.google.com/papers/bigtable.html"&gt;Bigtable&lt;/a&gt;<a name="line.123"></a>
<span class="sourceLineNo">124</span> * paper, pages 8-10.<a name="line.124"></a>
<span class="sourceLineNo">125</span> *<a name="line.125"></a>
<span class="sourceLineNo">126</span> * &lt;p&gt;By default, runs as a mapreduce job where each mapper runs a single test<a name="line.126"></a>
<span class="sourceLineNo">127</span> * client. Can also run as a non-mapreduce, multithreaded application by<a name="line.127"></a>
<span class="sourceLineNo">128</span> * specifying {@code --nomapred}. Each client does about 1GB of data, unless<a name="line.128"></a>
<span class="sourceLineNo">129</span> * specified otherwise.<a name="line.129"></a>
<span class="sourceLineNo">130</span> */<a name="line.130"></a>
<span class="sourceLineNo">131</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.131"></a>
<span class="sourceLineNo">132</span>public class PerformanceEvaluation extends Configured implements Tool {<a name="line.132"></a>
<span class="sourceLineNo">133</span>  static final String RANDOM_SEEK_SCAN = "randomSeekScan";<a name="line.133"></a>
<span class="sourceLineNo">134</span>  static final String RANDOM_READ = "randomRead";<a name="line.134"></a>
<span class="sourceLineNo">135</span>  private static final Logger LOG = LoggerFactory.getLogger(PerformanceEvaluation.class.getName());<a name="line.135"></a>
<span class="sourceLineNo">136</span>  private static final ObjectMapper MAPPER = new ObjectMapper();<a name="line.136"></a>
<span class="sourceLineNo">137</span>  static {<a name="line.137"></a>
<span class="sourceLineNo">138</span>    MAPPER.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);<a name="line.138"></a>
<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
<span class="sourceLineNo">140</span><a name="line.140"></a>
<span class="sourceLineNo">141</span>  public static final String TABLE_NAME = "TestTable";<a name="line.141"></a>
<span class="sourceLineNo">142</span>  public static final String FAMILY_NAME_BASE = "info";<a name="line.142"></a>
<span class="sourceLineNo">143</span>  public static final byte[] FAMILY_ZERO = Bytes.toBytes("info0");<a name="line.143"></a>
<span class="sourceLineNo">144</span>  public static final byte[] COLUMN_ZERO = Bytes.toBytes("" + 0);<a name="line.144"></a>
<span class="sourceLineNo">145</span>  public static final int DEFAULT_VALUE_LENGTH = 1000;<a name="line.145"></a>
<span class="sourceLineNo">146</span>  public static final int ROW_LENGTH = 26;<a name="line.146"></a>
<span class="sourceLineNo">147</span><a name="line.147"></a>
<span class="sourceLineNo">148</span>  private static final int ONE_GB = 1024 * 1024 * 1000;<a name="line.148"></a>
<span class="sourceLineNo">149</span>  private static final int DEFAULT_ROWS_PER_GB = ONE_GB / DEFAULT_VALUE_LENGTH;<a name="line.149"></a>
<span class="sourceLineNo">150</span>  // TODO : should we make this configurable<a name="line.150"></a>
<span class="sourceLineNo">151</span>  private static final int TAG_LENGTH = 256;<a name="line.151"></a>
<span class="sourceLineNo">152</span>  private static final DecimalFormat FMT = new DecimalFormat("0.##");<a name="line.152"></a>
<span class="sourceLineNo">153</span>  private static final MathContext CXT = MathContext.DECIMAL64;<a name="line.153"></a>
<span class="sourceLineNo">154</span>  private static final BigDecimal MS_PER_SEC = BigDecimal.valueOf(1000);<a name="line.154"></a>
<span class="sourceLineNo">155</span>  private static final BigDecimal BYTES_PER_MB = BigDecimal.valueOf(1024 * 1024);<a name="line.155"></a>
<span class="sourceLineNo">156</span>  private static final TestOptions DEFAULT_OPTS = new TestOptions();<a name="line.156"></a>
<span class="sourceLineNo">157</span><a name="line.157"></a>
<span class="sourceLineNo">158</span>  private static Map&lt;String, CmdDescriptor&gt; COMMANDS = new TreeMap&lt;&gt;();<a name="line.158"></a>
<span class="sourceLineNo">159</span>  private static final Path PERF_EVAL_DIR = new Path("performance_evaluation");<a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160"></a>
<span class="sourceLineNo">161</span>  static {<a name="line.161"></a>
<span class="sourceLineNo">162</span>    addCommandDescriptor(AsyncRandomReadTest.class, "asyncRandomRead",<a name="line.162"></a>
<span class="sourceLineNo">163</span>        "Run async random read test");<a name="line.163"></a>
<span class="sourceLineNo">164</span>    addCommandDescriptor(AsyncRandomWriteTest.class, "asyncRandomWrite",<a name="line.164"></a>
<span class="sourceLineNo">165</span>        "Run async random write test");<a name="line.165"></a>
<span class="sourceLineNo">166</span>    addCommandDescriptor(AsyncSequentialReadTest.class, "asyncSequentialRead",<a name="line.166"></a>
<span class="sourceLineNo">167</span>        "Run async sequential read test");<a name="line.167"></a>
<span class="sourceLineNo">168</span>    addCommandDescriptor(AsyncSequentialWriteTest.class, "asyncSequentialWrite",<a name="line.168"></a>
<span class="sourceLineNo">169</span>        "Run async sequential write test");<a name="line.169"></a>
<span class="sourceLineNo">170</span>    addCommandDescriptor(AsyncScanTest.class, "asyncScan",<a name="line.170"></a>
<span class="sourceLineNo">171</span>        "Run async scan test (read every row)");<a name="line.171"></a>
<span class="sourceLineNo">172</span>    addCommandDescriptor(RandomReadTest.class, RANDOM_READ,<a name="line.172"></a>
<span class="sourceLineNo">173</span>      "Run random read test");<a name="line.173"></a>
<span class="sourceLineNo">174</span>    addCommandDescriptor(RandomSeekScanTest.class, RANDOM_SEEK_SCAN,<a name="line.174"></a>
<span class="sourceLineNo">175</span>      "Run random seek and scan 100 test");<a name="line.175"></a>
<span class="sourceLineNo">176</span>    addCommandDescriptor(RandomScanWithRange10Test.class, "scanRange10",<a name="line.176"></a>
<span class="sourceLineNo">177</span>      "Run random seek scan with both start and stop row (max 10 rows)");<a name="line.177"></a>
<span class="sourceLineNo">178</span>    addCommandDescriptor(RandomScanWithRange100Test.class, "scanRange100",<a name="line.178"></a>
<span class="sourceLineNo">179</span>      "Run random seek scan with both start and stop row (max 100 rows)");<a name="line.179"></a>
<span class="sourceLineNo">180</span>    addCommandDescriptor(RandomScanWithRange1000Test.class, "scanRange1000",<a name="line.180"></a>
<span class="sourceLineNo">181</span>      "Run random seek scan with both start and stop row (max 1000 rows)");<a name="line.181"></a>
<span class="sourceLineNo">182</span>    addCommandDescriptor(RandomScanWithRange10000Test.class, "scanRange10000",<a name="line.182"></a>
<span class="sourceLineNo">183</span>      "Run random seek scan with both start and stop row (max 10000 rows)");<a name="line.183"></a>
<span class="sourceLineNo">184</span>    addCommandDescriptor(RandomWriteTest.class, "randomWrite",<a name="line.184"></a>
<span class="sourceLineNo">185</span>      "Run random write test");<a name="line.185"></a>
<span class="sourceLineNo">186</span>    addCommandDescriptor(SequentialReadTest.class, "sequentialRead",<a name="line.186"></a>
<span class="sourceLineNo">187</span>      "Run sequential read test");<a name="line.187"></a>
<span class="sourceLineNo">188</span>    addCommandDescriptor(SequentialWriteTest.class, "sequentialWrite",<a name="line.188"></a>
<span class="sourceLineNo">189</span>      "Run sequential write test");<a name="line.189"></a>
<span class="sourceLineNo">190</span>    addCommandDescriptor(ScanTest.class, "scan",<a name="line.190"></a>
<span class="sourceLineNo">191</span>      "Run scan test (read every row)");<a name="line.191"></a>
<span class="sourceLineNo">192</span>    addCommandDescriptor(FilteredScanTest.class, "filterScan",<a name="line.192"></a>
<span class="sourceLineNo">193</span>      "Run scan test using a filter to find a specific row based on it's value " +<a name="line.193"></a>
<span class="sourceLineNo">194</span>      "(make sure to use --rows=20)");<a name="line.194"></a>
<span class="sourceLineNo">195</span>    addCommandDescriptor(IncrementTest.class, "increment",<a name="line.195"></a>
<span class="sourceLineNo">196</span>      "Increment on each row; clients overlap on keyspace so some concurrent operations");<a name="line.196"></a>
<span class="sourceLineNo">197</span>    addCommandDescriptor(AppendTest.class, "append",<a name="line.197"></a>
<span class="sourceLineNo">198</span>      "Append on each row; clients overlap on keyspace so some concurrent operations");<a name="line.198"></a>
<span class="sourceLineNo">199</span>    addCommandDescriptor(CheckAndMutateTest.class, "checkAndMutate",<a name="line.199"></a>
<span class="sourceLineNo">200</span>      "CheckAndMutate on each row; clients overlap on keyspace so some concurrent operations");<a name="line.200"></a>
<span class="sourceLineNo">201</span>    addCommandDescriptor(CheckAndPutTest.class, "checkAndPut",<a name="line.201"></a>
<span class="sourceLineNo">202</span>      "CheckAndPut on each row; clients overlap on keyspace so some concurrent operations");<a name="line.202"></a>
<span class="sourceLineNo">203</span>    addCommandDescriptor(CheckAndDeleteTest.class, "checkAndDelete",<a name="line.203"></a>
<span class="sourceLineNo">204</span>      "CheckAndDelete on each row; clients overlap on keyspace so some concurrent operations");<a name="line.204"></a>
<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
<span class="sourceLineNo">206</span><a name="line.206"></a>
<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
<span class="sourceLineNo">208</span>   * Enum for map metrics.  Keep it out here rather than inside in the Map<a name="line.208"></a>
<span class="sourceLineNo">209</span>   * inner-class so we can find associated properties.<a name="line.209"></a>
<span class="sourceLineNo">210</span>   */<a name="line.210"></a>
<span class="sourceLineNo">211</span>  protected static enum Counter {<a name="line.211"></a>
<span class="sourceLineNo">212</span>    /** elapsed time */<a name="line.212"></a>
<span class="sourceLineNo">213</span>    ELAPSED_TIME,<a name="line.213"></a>
<span class="sourceLineNo">214</span>    /** number of rows */<a name="line.214"></a>
<span class="sourceLineNo">215</span>    ROWS<a name="line.215"></a>
<span class="sourceLineNo">216</span>  }<a name="line.216"></a>
<span class="sourceLineNo">217</span><a name="line.217"></a>
<span class="sourceLineNo">218</span>  protected static class RunResult implements Comparable&lt;RunResult&gt; {<a name="line.218"></a>
<span class="sourceLineNo">219</span>    public RunResult(long duration, Histogram hist) {<a name="line.219"></a>
<span class="sourceLineNo">220</span>      this.duration = duration;<a name="line.220"></a>
<span class="sourceLineNo">221</span>      this.hist = hist;<a name="line.221"></a>
<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
<span class="sourceLineNo">223</span><a name="line.223"></a>
<span class="sourceLineNo">224</span>    public final long duration;<a name="line.224"></a>
<span class="sourceLineNo">225</span>    public final Histogram hist;<a name="line.225"></a>
<span class="sourceLineNo">226</span><a name="line.226"></a>
<span class="sourceLineNo">227</span>    @Override<a name="line.227"></a>
<span class="sourceLineNo">228</span>    public String toString() {<a name="line.228"></a>
<span class="sourceLineNo">229</span>      return Long.toString(duration);<a name="line.229"></a>
<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
<span class="sourceLineNo">231</span><a name="line.231"></a>
<span class="sourceLineNo">232</span>    @Override public int compareTo(RunResult o) {<a name="line.232"></a>
<span class="sourceLineNo">233</span>      return Long.compare(this.duration, o.duration);<a name="line.233"></a>
<span class="sourceLineNo">234</span>    }<a name="line.234"></a>
<span class="sourceLineNo">235</span>  }<a name="line.235"></a>
<span class="sourceLineNo">236</span><a name="line.236"></a>
<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
<span class="sourceLineNo">238</span>   * Constructor<a name="line.238"></a>
<span class="sourceLineNo">239</span>   * @param conf Configuration object<a name="line.239"></a>
<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
<span class="sourceLineNo">241</span>  public PerformanceEvaluation(final Configuration conf) {<a name="line.241"></a>
<span class="sourceLineNo">242</span>    super(conf);<a name="line.242"></a>
<span class="sourceLineNo">243</span>  }<a name="line.243"></a>
<span class="sourceLineNo">244</span><a name="line.244"></a>
<span class="sourceLineNo">245</span>  protected static void addCommandDescriptor(Class&lt;? extends TestBase&gt; cmdClass,<a name="line.245"></a>
<span class="sourceLineNo">246</span>      String name, String description) {<a name="line.246"></a>
<span class="sourceLineNo">247</span>    CmdDescriptor cmdDescriptor = new CmdDescriptor(cmdClass, name, description);<a name="line.247"></a>
<span class="sourceLineNo">248</span>    COMMANDS.put(name, cmdDescriptor);<a name="line.248"></a>
<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
<span class="sourceLineNo">250</span><a name="line.250"></a>
<span class="sourceLineNo">251</span>  /**<a name="line.251"></a>
<span class="sourceLineNo">252</span>   * Implementations can have their status set.<a name="line.252"></a>
<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
<span class="sourceLineNo">254</span>  interface Status {<a name="line.254"></a>
<span class="sourceLineNo">255</span>    /**<a name="line.255"></a>
<span class="sourceLineNo">256</span>     * Sets status<a name="line.256"></a>
<span class="sourceLineNo">257</span>     * @param msg status message<a name="line.257"></a>
<span class="sourceLineNo">258</span>     * @throws IOException<a name="line.258"></a>
<span class="sourceLineNo">259</span>     */<a name="line.259"></a>
<span class="sourceLineNo">260</span>    void setStatus(final String msg) throws IOException;<a name="line.260"></a>
<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
<span class="sourceLineNo">262</span><a name="line.262"></a>
<span class="sourceLineNo">263</span>  /**<a name="line.263"></a>
<span class="sourceLineNo">264</span>   * MapReduce job that runs a performance evaluation client in each map task.<a name="line.264"></a>
<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
<span class="sourceLineNo">266</span>  public static class EvaluationMapTask<a name="line.266"></a>
<span class="sourceLineNo">267</span>      extends Mapper&lt;LongWritable, Text, LongWritable, LongWritable&gt; {<a name="line.267"></a>
<span class="sourceLineNo">268</span><a name="line.268"></a>
<span class="sourceLineNo">269</span>    /** configuration parameter name that contains the command */<a name="line.269"></a>
<span class="sourceLineNo">270</span>    public final static String CMD_KEY = "EvaluationMapTask.command";<a name="line.270"></a>
<span class="sourceLineNo">271</span>    /** configuration parameter name that contains the PE impl */<a name="line.271"></a>
<span class="sourceLineNo">272</span>    public static final String PE_KEY = "EvaluationMapTask.performanceEvalImpl";<a name="line.272"></a>
<span class="sourceLineNo">273</span><a name="line.273"></a>
<span class="sourceLineNo">274</span>    private Class&lt;? extends Test&gt; cmd;<a name="line.274"></a>
<span class="sourceLineNo">275</span><a name="line.275"></a>
<span class="sourceLineNo">276</span>    @Override<a name="line.276"></a>
<span class="sourceLineNo">277</span>    protected void setup(Context context) throws IOException, InterruptedException {<a name="line.277"></a>
<span class="sourceLineNo">278</span>      this.cmd = forName(context.getConfiguration().get(CMD_KEY), Test.class);<a name="line.278"></a>
<span class="sourceLineNo">279</span><a name="line.279"></a>
<span class="sourceLineNo">280</span>      // this is required so that extensions of PE are instantiated within the<a name="line.280"></a>
<span class="sourceLineNo">281</span>      // map reduce task...<a name="line.281"></a>
<span class="sourceLineNo">282</span>      Class&lt;? extends PerformanceEvaluation&gt; peClass =<a name="line.282"></a>
<span class="sourceLineNo">283</span>          forName(context.getConfiguration().get(PE_KEY), PerformanceEvaluation.class);<a name="line.283"></a>
<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
<span class="sourceLineNo">285</span>        peClass.getConstructor(Configuration.class).newInstance(context.getConfiguration());<a name="line.285"></a>
<span class="sourceLineNo">286</span>      } catch (Exception e) {<a name="line.286"></a>
<span class="sourceLineNo">287</span>        throw new IllegalStateException("Could not instantiate PE instance", e);<a name="line.287"></a>
<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
<span class="sourceLineNo">290</span><a name="line.290"></a>
<span class="sourceLineNo">291</span>    private &lt;Type&gt; Class&lt;? extends Type&gt; forName(String className, Class&lt;Type&gt; type) {<a name="line.291"></a>
<span class="sourceLineNo">292</span>      try {<a name="line.292"></a>
<span class="sourceLineNo">293</span>        return Class.forName(className).asSubclass(type);<a name="line.293"></a>
<span class="sourceLineNo">294</span>      } catch (ClassNotFoundException e) {<a name="line.294"></a>
<span class="sourceLineNo">295</span>        throw new IllegalStateException("Could not find class for name: " + className, e);<a name="line.295"></a>
<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
<span class="sourceLineNo">298</span><a name="line.298"></a>
<span class="sourceLineNo">299</span>    @Override<a name="line.299"></a>
<span class="sourceLineNo">300</span>    protected void map(LongWritable key, Text value, final Context context)<a name="line.300"></a>
<span class="sourceLineNo">301</span>           throws IOException, InterruptedException {<a name="line.301"></a>
<span class="sourceLineNo">302</span><a name="line.302"></a>
<span class="sourceLineNo">303</span>      Status status = new Status() {<a name="line.303"></a>
<span class="sourceLineNo">304</span>        @Override<a name="line.304"></a>
<span class="sourceLineNo">305</span>        public void setStatus(String msg) {<a name="line.305"></a>
<span class="sourceLineNo">306</span>           context.setStatus(msg);<a name="line.306"></a>
<span class="sourceLineNo">307</span>        }<a name="line.307"></a>
<span class="sourceLineNo">308</span>      };<a name="line.308"></a>
<span class="sourceLineNo">309</span><a name="line.309"></a>
<span class="sourceLineNo">310</span>      ObjectMapper mapper = new ObjectMapper();<a name="line.310"></a>
<span class="sourceLineNo">311</span>      TestOptions opts = mapper.readValue(value.toString(), TestOptions.class);<a name="line.311"></a>
<span class="sourceLineNo">312</span>      Configuration conf = HBaseConfiguration.create(context.getConfiguration());<a name="line.312"></a>
<span class="sourceLineNo">313</span>      final Connection con = ConnectionFactory.createConnection(conf);<a name="line.313"></a>
<span class="sourceLineNo">314</span>      AsyncConnection asyncCon = null;<a name="line.314"></a>
<span class="sourceLineNo">315</span>      try {<a name="line.315"></a>
<span class="sourceLineNo">316</span>        asyncCon = ConnectionFactory.createAsyncConnection(conf).get();<a name="line.316"></a>
<span class="sourceLineNo">317</span>      } catch (ExecutionException e) {<a name="line.317"></a>
<span class="sourceLineNo">318</span>        throw new IOException(e);<a name="line.318"></a>
<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
<span class="sourceLineNo">320</span><a name="line.320"></a>
<span class="sourceLineNo">321</span>      // Evaluation task<a name="line.321"></a>
<span class="sourceLineNo">322</span>      RunResult result = PerformanceEvaluation.runOneClient(this.cmd, conf, con, asyncCon, opts, status);<a name="line.322"></a>
<span class="sourceLineNo">323</span>      // Collect how much time the thing took. Report as map output and<a name="line.323"></a>
<span class="sourceLineNo">324</span>      // to the ELAPSED_TIME counter.<a name="line.324"></a>
<span class="sourceLineNo">325</span>      context.getCounter(Counter.ELAPSED_TIME).increment(result.duration);<a name="line.325"></a>
<span class="sourceLineNo">326</span>      context.getCounter(Counter.ROWS).increment(opts.perClientRunRows);<a name="line.326"></a>
<span class="sourceLineNo">327</span>      context.write(new LongWritable(opts.startRow), new LongWritable(result.duration));<a name="line.327"></a>
<span class="sourceLineNo">328</span>      context.progress();<a name="line.328"></a>
<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
<span class="sourceLineNo">330</span>  }<a name="line.330"></a>
<span class="sourceLineNo">331</span><a name="line.331"></a>
<span class="sourceLineNo">332</span>  /*<a name="line.332"></a>
<span class="sourceLineNo">333</span>   * If table does not already exist, create. Also create a table when<a name="line.333"></a>
<span class="sourceLineNo">334</span>   * {@code opts.presplitRegions} is specified or when the existing table's<a name="line.334"></a>
<span class="sourceLineNo">335</span>   * region replica count doesn't match {@code opts.replicas}.<a name="line.335"></a>
<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
<span class="sourceLineNo">337</span>  static boolean checkTable(Admin admin, TestOptions opts) throws IOException {<a name="line.337"></a>
<span class="sourceLineNo">338</span>    TableName tableName = TableName.valueOf(opts.tableName);<a name="line.338"></a>
<span class="sourceLineNo">339</span>    boolean needsDelete = false, exists = admin.tableExists(tableName);<a name="line.339"></a>
<span class="sourceLineNo">340</span>    boolean isReadCmd = opts.cmdName.toLowerCase(Locale.ROOT).contains("read")<a name="line.340"></a>
<span class="sourceLineNo">341</span>      || opts.cmdName.toLowerCase(Locale.ROOT).contains("scan");<a name="line.341"></a>
<span class="sourceLineNo">342</span>    if (!exists &amp;&amp; isReadCmd) {<a name="line.342"></a>
<span class="sourceLineNo">343</span>      throw new IllegalStateException(<a name="line.343"></a>
<span class="sourceLineNo">344</span>        "Must specify an existing table for read commands. Run a write command first.");<a name="line.344"></a>
<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
<span class="sourceLineNo">346</span>    HTableDescriptor desc =<a name="line.346"></a>
<span class="sourceLineNo">347</span>      exists ? admin.getTableDescriptor(TableName.valueOf(opts.tableName)) : null;<a name="line.347"></a>
<span class="sourceLineNo">348</span>    byte[][] splits = getSplits(opts);<a name="line.348"></a>
<span class="sourceLineNo">349</span><a name="line.349"></a>
<span class="sourceLineNo">350</span>    // recreate the table when user has requested presplit or when existing<a name="line.350"></a>
<span class="sourceLineNo">351</span>    // {RegionSplitPolicy,replica count} does not match requested, or when the<a name="line.351"></a>
<span class="sourceLineNo">352</span>    // number of column families does not match requested.<a name="line.352"></a>
<span class="sourceLineNo">353</span>    if ((exists &amp;&amp; opts.presplitRegions != DEFAULT_OPTS.presplitRegions)<a name="line.353"></a>
<span class="sourceLineNo">354</span>      || (!isReadCmd &amp;&amp; desc != null &amp;&amp;<a name="line.354"></a>
<span class="sourceLineNo">355</span>          !StringUtils.equals(desc.getRegionSplitPolicyClassName(), opts.splitPolicy))<a name="line.355"></a>
<span class="sourceLineNo">356</span>      || (!isReadCmd &amp;&amp; desc != null &amp;&amp; desc.getRegionReplication() != opts.replicas)<a name="line.356"></a>
<span class="sourceLineNo">357</span>      || (desc != null &amp;&amp; desc.getColumnFamilyCount() != opts.families)) {<a name="line.357"></a>
<span class="sourceLineNo">358</span>      needsDelete = true;<a name="line.358"></a>
<span class="sourceLineNo">359</span>      // wait, why did it delete my table?!?<a name="line.359"></a>
<span class="sourceLineNo">360</span>      LOG.debug(MoreObjects.toStringHelper("needsDelete")<a name="line.360"></a>
<span class="sourceLineNo">361</span>        .add("needsDelete", needsDelete)<a name="line.361"></a>
<span class="sourceLineNo">362</span>        .add("isReadCmd", isReadCmd)<a name="line.362"></a>
<span class="sourceLineNo">363</span>        .add("exists", exists)<a name="line.363"></a>
<span class="sourceLineNo">364</span>        .add("desc", desc)<a name="line.364"></a>
<span class="sourceLineNo">365</span>        .add("presplit", opts.presplitRegions)<a name="line.365"></a>
<span class="sourceLineNo">366</span>        .add("splitPolicy", opts.splitPolicy)<a name="line.366"></a>
<span class="sourceLineNo">367</span>        .add("replicas", opts.replicas)<a name="line.367"></a>
<span class="sourceLineNo">368</span>        .add("families", opts.families)<a name="line.368"></a>
<span class="sourceLineNo">369</span>        .toString());<a name="line.369"></a>
<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
<span class="sourceLineNo">371</span><a name="line.371"></a>
<span class="sourceLineNo">372</span>    // remove an existing table<a name="line.372"></a>
<span class="sourceLineNo">373</span>    if (needsDelete) {<a name="line.373"></a>
<span class="sourceLineNo">374</span>      if (admin.isTableEnabled(tableName)) {<a name="line.374"></a>
<span class="sourceLineNo">375</span>        admin.disableTable(tableName);<a name="line.375"></a>
<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
<span class="sourceLineNo">377</span>      admin.deleteTable(tableName);<a name="line.377"></a>
<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
<span class="sourceLineNo">379</span><a name="line.379"></a>
<span class="sourceLineNo">380</span>    // table creation is necessary<a name="line.380"></a>
<span class="sourceLineNo">381</span>    if (!exists || needsDelete) {<a name="line.381"></a>
<span class="sourceLineNo">382</span>      desc = getTableDescriptor(opts);<a name="line.382"></a>
<span class="sourceLineNo">383</span>      if (splits != null) {<a name="line.383"></a>
<span class="sourceLineNo">384</span>        if (LOG.isDebugEnabled()) {<a name="line.384"></a>
<span class="sourceLineNo">385</span>          for (int i = 0; i &lt; splits.length; i++) {<a name="line.385"></a>
<span class="sourceLineNo">386</span>            LOG.debug(" split " + i + ": " + Bytes.toStringBinary(splits[i]));<a name="line.386"></a>
<span class="sourceLineNo">387</span>          }<a name="line.387"></a>
<span class="sourceLineNo">388</span>        }<a name="line.388"></a>
<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
<span class="sourceLineNo">390</span>      admin.createTable(desc, splits);<a name="line.390"></a>
<span class="sourceLineNo">391</span>      LOG.info("Table " + desc + " created");<a name="line.391"></a>
<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
<span class="sourceLineNo">393</span>    return admin.tableExists(tableName);<a name="line.393"></a>
<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
<span class="sourceLineNo">395</span><a name="line.395"></a>
<span class="sourceLineNo">396</span>  /**<a name="line.396"></a>
<span class="sourceLineNo">397</span>   * Create an HTableDescriptor from provided TestOptions.<a name="line.397"></a>
<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
<span class="sourceLineNo">399</span>  protected static HTableDescriptor getTableDescriptor(TestOptions opts) {<a name="line.399"></a>
<span class="sourceLineNo">400</span>    HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(opts.tableName));<a name="line.400"></a>
<span class="sourceLineNo">401</span>    for (int family = 0; family &lt; opts.families; family++) {<a name="line.401"></a>
<span class="sourceLineNo">402</span>      byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.402"></a>
<span class="sourceLineNo">403</span>      HColumnDescriptor familyDesc = new HColumnDescriptor(familyName);<a name="line.403"></a>
<span class="sourceLineNo">404</span>      familyDesc.setDataBlockEncoding(opts.blockEncoding);<a name="line.404"></a>
<span class="sourceLineNo">405</span>      familyDesc.setCompressionType(opts.compression);<a name="line.405"></a>
<span class="sourceLineNo">406</span>      familyDesc.setBloomFilterType(opts.bloomType);<a name="line.406"></a>
<span class="sourceLineNo">407</span>      familyDesc.setBlocksize(opts.blockSize);<a name="line.407"></a>
<span class="sourceLineNo">408</span>      if (opts.inMemoryCF) {<a name="line.408"></a>
<span class="sourceLineNo">409</span>        familyDesc.setInMemory(true);<a name="line.409"></a>
<span class="sourceLineNo">410</span>      }<a name="line.410"></a>
<span class="sourceLineNo">411</span>      familyDesc.setInMemoryCompaction(opts.inMemoryCompaction);<a name="line.411"></a>
<span class="sourceLineNo">412</span>      tableDesc.addFamily(familyDesc);<a name="line.412"></a>
<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
<span class="sourceLineNo">414</span>    if (opts.replicas != DEFAULT_OPTS.replicas) {<a name="line.414"></a>
<span class="sourceLineNo">415</span>      tableDesc.setRegionReplication(opts.replicas);<a name="line.415"></a>
<span class="sourceLineNo">416</span>    }<a name="line.416"></a>
<span class="sourceLineNo">417</span>    if (opts.splitPolicy != null &amp;&amp; !opts.splitPolicy.equals(DEFAULT_OPTS.splitPolicy)) {<a name="line.417"></a>
<span class="sourceLineNo">418</span>      tableDesc.setRegionSplitPolicyClassName(opts.splitPolicy);<a name="line.418"></a>
<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
<span class="sourceLineNo">420</span>    return tableDesc;<a name="line.420"></a>
<span class="sourceLineNo">421</span>  }<a name="line.421"></a>
<span class="sourceLineNo">422</span><a name="line.422"></a>
<span class="sourceLineNo">423</span>  /**<a name="line.423"></a>
<span class="sourceLineNo">424</span>   * generates splits based on total number of rows and specified split regions<a name="line.424"></a>
<span class="sourceLineNo">425</span>   */<a name="line.425"></a>
<span class="sourceLineNo">426</span>  protected static byte[][] getSplits(TestOptions opts) {<a name="line.426"></a>
<span class="sourceLineNo">427</span>    if (opts.presplitRegions == DEFAULT_OPTS.presplitRegions)<a name="line.427"></a>
<span class="sourceLineNo">428</span>      return null;<a name="line.428"></a>
<span class="sourceLineNo">429</span><a name="line.429"></a>
<span class="sourceLineNo">430</span>    int numSplitPoints = opts.presplitRegions - 1;<a name="line.430"></a>
<span class="sourceLineNo">431</span>    byte[][] splits = new byte[numSplitPoints][];<a name="line.431"></a>
<span class="sourceLineNo">432</span>    int jump = opts.totalRows / opts.presplitRegions;<a name="line.432"></a>
<span class="sourceLineNo">433</span>    for (int i = 0; i &lt; numSplitPoints; i++) {<a name="line.433"></a>
<span class="sourceLineNo">434</span>      int rowkey = jump * (1 + i);<a name="line.434"></a>
<span class="sourceLineNo">435</span>      splits[i] = format(rowkey);<a name="line.435"></a>
<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
<span class="sourceLineNo">437</span>    return splits;<a name="line.437"></a>
<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
<span class="sourceLineNo">439</span><a name="line.439"></a>
<span class="sourceLineNo">440</span>  /*<a name="line.440"></a>
<span class="sourceLineNo">441</span>   * Run all clients in this vm each to its own thread.<a name="line.441"></a>
<span class="sourceLineNo">442</span>   */<a name="line.442"></a>
<span class="sourceLineNo">443</span>  static RunResult[] doLocalClients(final TestOptions opts, final Configuration conf)<a name="line.443"></a>
<span class="sourceLineNo">444</span>      throws IOException, InterruptedException, ExecutionException {<a name="line.444"></a>
<span class="sourceLineNo">445</span>    final Class&lt;? extends TestBase&gt; cmd = determineCommandClass(opts.cmdName);<a name="line.445"></a>
<span class="sourceLineNo">446</span>    assert cmd != null;<a name="line.446"></a>
<span class="sourceLineNo">447</span>    @SuppressWarnings("unchecked")<a name="line.447"></a>
<span class="sourceLineNo">448</span>    Future&lt;RunResult&gt;[] threads = new Future[opts.numClientThreads];<a name="line.448"></a>
<span class="sourceLineNo">449</span>    RunResult[] results = new RunResult[opts.numClientThreads];<a name="line.449"></a>
<span class="sourceLineNo">450</span>    ExecutorService pool = Executors.newFixedThreadPool(opts.numClientThreads,<a name="line.450"></a>
<span class="sourceLineNo">451</span>      new ThreadFactoryBuilder().setNameFormat("TestClient-%s").build());<a name="line.451"></a>
<span class="sourceLineNo">452</span>    final Connection con = ConnectionFactory.createConnection(conf);<a name="line.452"></a>
<span class="sourceLineNo">453</span>    final AsyncConnection asyncCon = ConnectionFactory.createAsyncConnection(conf).get();<a name="line.453"></a>
<span class="sourceLineNo">454</span>    for (int i = 0; i &lt; threads.length; i++) {<a name="line.454"></a>
<span class="sourceLineNo">455</span>      final int index = i;<a name="line.455"></a>
<span class="sourceLineNo">456</span>      threads[i] = pool.submit(new Callable&lt;RunResult&gt;() {<a name="line.456"></a>
<span class="sourceLineNo">457</span>        @Override<a name="line.457"></a>
<span class="sourceLineNo">458</span>        public RunResult call() throws Exception {<a name="line.458"></a>
<span class="sourceLineNo">459</span>          TestOptions threadOpts = new TestOptions(opts);<a name="line.459"></a>
<span class="sourceLineNo">460</span>          if (threadOpts.startRow == 0) threadOpts.startRow = index * threadOpts.perClientRunRows;<a name="line.460"></a>
<span class="sourceLineNo">461</span>          RunResult run = runOneClient(cmd, conf, con, asyncCon, threadOpts, new Status() {<a name="line.461"></a>
<span class="sourceLineNo">462</span>            @Override<a name="line.462"></a>
<span class="sourceLineNo">463</span>            public void setStatus(final String msg) throws IOException {<a name="line.463"></a>
<span class="sourceLineNo">464</span>              LOG.info(msg);<a name="line.464"></a>
<span class="sourceLineNo">465</span>            }<a name="line.465"></a>
<span class="sourceLineNo">466</span>          });<a name="line.466"></a>
<span class="sourceLineNo">467</span>          LOG.info("Finished " + Thread.currentThread().getName() + " in " + run.duration +<a name="line.467"></a>
<span class="sourceLineNo">468</span>            "ms over " + threadOpts.perClientRunRows + " rows");<a name="line.468"></a>
<span class="sourceLineNo">469</span>          return run;<a name="line.469"></a>
<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
<span class="sourceLineNo">471</span>      });<a name="line.471"></a>
<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
<span class="sourceLineNo">473</span>    pool.shutdown();<a name="line.473"></a>
<span class="sourceLineNo">474</span><a name="line.474"></a>
<span class="sourceLineNo">475</span>    for (int i = 0; i &lt; threads.length; i++) {<a name="line.475"></a>
<span class="sourceLineNo">476</span>      try {<a name="line.476"></a>
<span class="sourceLineNo">477</span>        results[i] = threads[i].get();<a name="line.477"></a>
<span class="sourceLineNo">478</span>      } catch (ExecutionException e) {<a name="line.478"></a>
<span class="sourceLineNo">479</span>        throw new IOException(e.getCause());<a name="line.479"></a>
<span class="sourceLineNo">480</span>      }<a name="line.480"></a>
<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
<span class="sourceLineNo">482</span>    final String test = cmd.getSimpleName();<a name="line.482"></a>
<span class="sourceLineNo">483</span>    LOG.info("[" + test + "] Summary of timings (ms): "<a name="line.483"></a>
<span class="sourceLineNo">484</span>             + Arrays.toString(results));<a name="line.484"></a>
<span class="sourceLineNo">485</span>    Arrays.sort(results);<a name="line.485"></a>
<span class="sourceLineNo">486</span>    long total = 0;<a name="line.486"></a>
<span class="sourceLineNo">487</span>    for (RunResult result : results) {<a name="line.487"></a>
<span class="sourceLineNo">488</span>      total += result.duration;<a name="line.488"></a>
<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
<span class="sourceLineNo">490</span>    LOG.info("[" + test + "]"<a name="line.490"></a>
<span class="sourceLineNo">491</span>      + "\tMin: " + results[0] + "ms"<a name="line.491"></a>
<span class="sourceLineNo">492</span>      + "\tMax: " + results[results.length - 1] + "ms"<a name="line.492"></a>
<span class="sourceLineNo">493</span>      + "\tAvg: " + (total / results.length) + "ms");<a name="line.493"></a>
<span class="sourceLineNo">494</span><a name="line.494"></a>
<span class="sourceLineNo">495</span>    con.close();<a name="line.495"></a>
<span class="sourceLineNo">496</span>    asyncCon.close();<a name="line.496"></a>
<span class="sourceLineNo">497</span><a name="line.497"></a>
<span class="sourceLineNo">498</span>    return results;<a name="line.498"></a>
<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
<span class="sourceLineNo">500</span><a name="line.500"></a>
<span class="sourceLineNo">501</span>  /*<a name="line.501"></a>
<span class="sourceLineNo">502</span>   * Run a mapreduce job.  Run as many maps as asked-for clients.<a name="line.502"></a>
<span class="sourceLineNo">503</span>   * Before we start up the job, write out an input file with instruction<a name="line.503"></a>
<span class="sourceLineNo">504</span>   * per client regards which row they are to start on.<a name="line.504"></a>
<span class="sourceLineNo">505</span>   * @param cmd Command to run.<a name="line.505"></a>
<span class="sourceLineNo">506</span>   * @throws IOException<a name="line.506"></a>
<span class="sourceLineNo">507</span>   */<a name="line.507"></a>
<span class="sourceLineNo">508</span>  static Job doMapReduce(TestOptions opts, final Configuration conf)<a name="line.508"></a>
<span class="sourceLineNo">509</span>      throws IOException, InterruptedException, ClassNotFoundException {<a name="line.509"></a>
<span class="sourceLineNo">510</span>    final Class&lt;? extends TestBase&gt; cmd = determineCommandClass(opts.cmdName);<a name="line.510"></a>
<span class="sourceLineNo">511</span>    assert cmd != null;<a name="line.511"></a>
<span class="sourceLineNo">512</span>    Path inputDir = writeInputFile(conf, opts);<a name="line.512"></a>
<span class="sourceLineNo">513</span>    conf.set(EvaluationMapTask.CMD_KEY, cmd.getName());<a name="line.513"></a>
<span class="sourceLineNo">514</span>    conf.set(EvaluationMapTask.PE_KEY, PerformanceEvaluation.class.getName());<a name="line.514"></a>
<span class="sourceLineNo">515</span>    Job job = Job.getInstance(conf);<a name="line.515"></a>
<span class="sourceLineNo">516</span>    job.setJarByClass(PerformanceEvaluation.class);<a name="line.516"></a>
<span class="sourceLineNo">517</span>    job.setJobName("HBase Performance Evaluation - " + opts.cmdName);<a name="line.517"></a>
<span class="sourceLineNo">518</span><a name="line.518"></a>
<span class="sourceLineNo">519</span>    job.setInputFormatClass(NLineInputFormat.class);<a name="line.519"></a>
<span class="sourceLineNo">520</span>    NLineInputFormat.setInputPaths(job, inputDir);<a name="line.520"></a>
<span class="sourceLineNo">521</span>    // this is default, but be explicit about it just in case.<a name="line.521"></a>
<span class="sourceLineNo">522</span>    NLineInputFormat.setNumLinesPerSplit(job, 1);<a name="line.522"></a>
<span class="sourceLineNo">523</span><a name="line.523"></a>
<span class="sourceLineNo">524</span>    job.setOutputKeyClass(LongWritable.class);<a name="line.524"></a>
<span class="sourceLineNo">525</span>    job.setOutputValueClass(LongWritable.class);<a name="line.525"></a>
<span class="sourceLineNo">526</span><a name="line.526"></a>
<span class="sourceLineNo">527</span>    job.setMapperClass(EvaluationMapTask.class);<a name="line.527"></a>
<span class="sourceLineNo">528</span>    job.setReducerClass(LongSumReducer.class);<a name="line.528"></a>
<span class="sourceLineNo">529</span><a name="line.529"></a>
<span class="sourceLineNo">530</span>    job.setNumReduceTasks(1);<a name="line.530"></a>
<span class="sourceLineNo">531</span><a name="line.531"></a>
<span class="sourceLineNo">532</span>    job.setOutputFormatClass(TextOutputFormat.class);<a name="line.532"></a>
<span class="sourceLineNo">533</span>    TextOutputFormat.setOutputPath(job, new Path(inputDir.getParent(), "outputs"));<a name="line.533"></a>
<span class="sourceLineNo">534</span><a name="line.534"></a>
<span class="sourceLineNo">535</span>    TableMapReduceUtil.addDependencyJars(job);<a name="line.535"></a>
<span class="sourceLineNo">536</span>    TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(),<a name="line.536"></a>
<span class="sourceLineNo">537</span>      Histogram.class,     // yammer metrics<a name="line.537"></a>
<span class="sourceLineNo">538</span>      ObjectMapper.class,  // jackson-mapper-asl<a name="line.538"></a>
<span class="sourceLineNo">539</span>      FilterAllFilter.class // hbase-server tests jar<a name="line.539"></a>
<span class="sourceLineNo">540</span>      );<a name="line.540"></a>
<span class="sourceLineNo">541</span><a name="line.541"></a>
<span class="sourceLineNo">542</span>    TableMapReduceUtil.initCredentials(job);<a name="line.542"></a>
<span class="sourceLineNo">543</span><a name="line.543"></a>
<span class="sourceLineNo">544</span>    job.waitForCompletion(true);<a name="line.544"></a>
<span class="sourceLineNo">545</span>    return job;<a name="line.545"></a>
<span class="sourceLineNo">546</span>  }<a name="line.546"></a>
<span class="sourceLineNo">547</span><a name="line.547"></a>
<span class="sourceLineNo">548</span>  /**<a name="line.548"></a>
<span class="sourceLineNo">549</span>   * Each client has one mapper to do the work,  and client do the resulting count in a map task.<a name="line.549"></a>
<span class="sourceLineNo">550</span>   */<a name="line.550"></a>
<span class="sourceLineNo">551</span><a name="line.551"></a>
<span class="sourceLineNo">552</span>  static String JOB_INPUT_FILENAME = "input.txt";<a name="line.552"></a>
<span class="sourceLineNo">553</span><a name="line.553"></a>
<span class="sourceLineNo">554</span>  /*<a name="line.554"></a>
<span class="sourceLineNo">555</span>   * Write input file of offsets-per-client for the mapreduce job.<a name="line.555"></a>
<span class="sourceLineNo">556</span>   * @param c Configuration<a name="line.556"></a>
<span class="sourceLineNo">557</span>   * @return Directory that contains file written whose name is JOB_INPUT_FILENAME<a name="line.557"></a>
<span class="sourceLineNo">558</span>   * @throws IOException<a name="line.558"></a>
<span class="sourceLineNo">559</span>   */<a name="line.559"></a>
<span class="sourceLineNo">560</span>  static Path writeInputFile(final Configuration c, final TestOptions opts) throws IOException {<a name="line.560"></a>
<span class="sourceLineNo">561</span>    return writeInputFile(c, opts, new Path("."));<a name="line.561"></a>
<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
<span class="sourceLineNo">563</span><a name="line.563"></a>
<span class="sourceLineNo">564</span>  static Path writeInputFile(final Configuration c, final TestOptions opts, final Path basedir)<a name="line.564"></a>
<span class="sourceLineNo">565</span>  throws IOException {<a name="line.565"></a>
<span class="sourceLineNo">566</span>    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");<a name="line.566"></a>
<span class="sourceLineNo">567</span>    Path jobdir = new Path(new Path(basedir, PERF_EVAL_DIR), formatter.format(new Date()));<a name="line.567"></a>
<span class="sourceLineNo">568</span>    Path inputDir = new Path(jobdir, "inputs");<a name="line.568"></a>
<span class="sourceLineNo">569</span><a name="line.569"></a>
<span class="sourceLineNo">570</span>    FileSystem fs = FileSystem.get(c);<a name="line.570"></a>
<span class="sourceLineNo">571</span>    fs.mkdirs(inputDir);<a name="line.571"></a>
<span class="sourceLineNo">572</span><a name="line.572"></a>
<span class="sourceLineNo">573</span>    Path inputFile = new Path(inputDir, JOB_INPUT_FILENAME);<a name="line.573"></a>
<span class="sourceLineNo">574</span>    PrintStream out = new PrintStream(fs.create(inputFile));<a name="line.574"></a>
<span class="sourceLineNo">575</span>    // Make input random.<a name="line.575"></a>
<span class="sourceLineNo">576</span>    Map&lt;Integer, String&gt; m = new TreeMap&lt;&gt;();<a name="line.576"></a>
<span class="sourceLineNo">577</span>    Hash h = MurmurHash.getInstance();<a name="line.577"></a>
<span class="sourceLineNo">578</span>    int perClientRows = (opts.totalRows / opts.numClientThreads);<a name="line.578"></a>
<span class="sourceLineNo">579</span>    try {<a name="line.579"></a>
<span class="sourceLineNo">580</span>      for (int j = 0; j &lt; opts.numClientThreads; j++) {<a name="line.580"></a>
<span class="sourceLineNo">581</span>        TestOptions next = new TestOptions(opts);<a name="line.581"></a>
<span class="sourceLineNo">582</span>        next.startRow = j * perClientRows;<a name="line.582"></a>
<span class="sourceLineNo">583</span>        next.perClientRunRows = perClientRows;<a name="line.583"></a>
<span class="sourceLineNo">584</span>        String s = MAPPER.writeValueAsString(next);<a name="line.584"></a>
<span class="sourceLineNo">585</span>        LOG.info("Client=" + j + ", input=" + s);<a name="line.585"></a>
<span class="sourceLineNo">586</span>        byte[] b = Bytes.toBytes(s);<a name="line.586"></a>
<span class="sourceLineNo">587</span>        int hash = h.hash(new ByteArrayHashKey(b, 0, b.length), -1);<a name="line.587"></a>
<span class="sourceLineNo">588</span>        m.put(hash, s);<a name="line.588"></a>
<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
<span class="sourceLineNo">590</span>      for (Map.Entry&lt;Integer, String&gt; e: m.entrySet()) {<a name="line.590"></a>
<span class="sourceLineNo">591</span>        out.println(e.getValue());<a name="line.591"></a>
<span class="sourceLineNo">592</span>      }<a name="line.592"></a>
<span class="sourceLineNo">593</span>    } finally {<a name="line.593"></a>
<span class="sourceLineNo">594</span>      out.close();<a name="line.594"></a>
<span class="sourceLineNo">595</span>    }<a name="line.595"></a>
<span class="sourceLineNo">596</span>    return inputDir;<a name="line.596"></a>
<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
<span class="sourceLineNo">598</span><a name="line.598"></a>
<span class="sourceLineNo">599</span>  /**<a name="line.599"></a>
<span class="sourceLineNo">600</span>   * Describes a command.<a name="line.600"></a>
<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
<span class="sourceLineNo">602</span>  static class CmdDescriptor {<a name="line.602"></a>
<span class="sourceLineNo">603</span>    private Class&lt;? extends TestBase&gt; cmdClass;<a name="line.603"></a>
<span class="sourceLineNo">604</span>    private String name;<a name="line.604"></a>
<span class="sourceLineNo">605</span>    private String description;<a name="line.605"></a>
<span class="sourceLineNo">606</span><a name="line.606"></a>
<span class="sourceLineNo">607</span>    CmdDescriptor(Class&lt;? extends TestBase&gt; cmdClass, String name, String description) {<a name="line.607"></a>
<span class="sourceLineNo">608</span>      this.cmdClass = cmdClass;<a name="line.608"></a>
<span class="sourceLineNo">609</span>      this.name = name;<a name="line.609"></a>
<span class="sourceLineNo">610</span>      this.description = description;<a name="line.610"></a>
<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
<span class="sourceLineNo">612</span><a name="line.612"></a>
<span class="sourceLineNo">613</span>    public Class&lt;? extends TestBase&gt; getCmdClass() {<a name="line.613"></a>
<span class="sourceLineNo">614</span>      return cmdClass;<a name="line.614"></a>
<span class="sourceLineNo">615</span>    }<a name="line.615"></a>
<span class="sourceLineNo">616</span><a name="line.616"></a>
<span class="sourceLineNo">617</span>    public String getName() {<a name="line.617"></a>
<span class="sourceLineNo">618</span>      return name;<a name="line.618"></a>
<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
<span class="sourceLineNo">620</span><a name="line.620"></a>
<span class="sourceLineNo">621</span>    public String getDescription() {<a name="line.621"></a>
<span class="sourceLineNo">622</span>      return description;<a name="line.622"></a>
<span class="sourceLineNo">623</span>    }<a name="line.623"></a>
<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
<span class="sourceLineNo">625</span><a name="line.625"></a>
<span class="sourceLineNo">626</span>  /**<a name="line.626"></a>
<span class="sourceLineNo">627</span>   * Wraps up options passed to {@link org.apache.hadoop.hbase.PerformanceEvaluation}.<a name="line.627"></a>
<span class="sourceLineNo">628</span>   * This makes tracking all these arguments a little easier.<a name="line.628"></a>
<span class="sourceLineNo">629</span>   * NOTE: ADDING AN OPTION, you need to add a data member, a getter/setter (to make JSON<a name="line.629"></a>
<span class="sourceLineNo">630</span>   * serialization of this TestOptions class behave), and you need to add to the clone constructor<a name="line.630"></a>
<span class="sourceLineNo">631</span>   * below copying your new option from the 'that' to the 'this'.  Look for 'clone' below.<a name="line.631"></a>
<span class="sourceLineNo">632</span>   */<a name="line.632"></a>
<span class="sourceLineNo">633</span>  static class TestOptions {<a name="line.633"></a>
<span class="sourceLineNo">634</span>    String cmdName = null;<a name="line.634"></a>
<span class="sourceLineNo">635</span>    boolean nomapred = false;<a name="line.635"></a>
<span class="sourceLineNo">636</span>    boolean filterAll = false;<a name="line.636"></a>
<span class="sourceLineNo">637</span>    int startRow = 0;<a name="line.637"></a>
<span class="sourceLineNo">638</span>    float size = 1.0f;<a name="line.638"></a>
<span class="sourceLineNo">639</span>    int perClientRunRows = DEFAULT_ROWS_PER_GB;<a name="line.639"></a>
<span class="sourceLineNo">640</span>    int numClientThreads = 1;<a name="line.640"></a>
<span class="sourceLineNo">641</span>    int totalRows = DEFAULT_ROWS_PER_GB;<a name="line.641"></a>
<span class="sourceLineNo">642</span>    int measureAfter = 0;<a name="line.642"></a>
<span class="sourceLineNo">643</span>    float sampleRate = 1.0f;<a name="line.643"></a>
<span class="sourceLineNo">644</span>    double traceRate = 0.0;<a name="line.644"></a>
<span class="sourceLineNo">645</span>    String tableName = TABLE_NAME;<a name="line.645"></a>
<span class="sourceLineNo">646</span>    boolean flushCommits = true;<a name="line.646"></a>
<span class="sourceLineNo">647</span>    boolean writeToWAL = true;<a name="line.647"></a>
<span class="sourceLineNo">648</span>    boolean autoFlush = false;<a name="line.648"></a>
<span class="sourceLineNo">649</span>    boolean oneCon = false;<a name="line.649"></a>
<span class="sourceLineNo">650</span>    boolean useTags = false;<a name="line.650"></a>
<span class="sourceLineNo">651</span>    int noOfTags = 1;<a name="line.651"></a>
<span class="sourceLineNo">652</span>    boolean reportLatency = false;<a name="line.652"></a>
<span class="sourceLineNo">653</span>    int multiGet = 0;<a name="line.653"></a>
<span class="sourceLineNo">654</span>    int randomSleep = 0;<a name="line.654"></a>
<span class="sourceLineNo">655</span>    boolean inMemoryCF = false;<a name="line.655"></a>
<span class="sourceLineNo">656</span>    int presplitRegions = 0;<a name="line.656"></a>
<span class="sourceLineNo">657</span>    int replicas = HTableDescriptor.DEFAULT_REGION_REPLICATION;<a name="line.657"></a>
<span class="sourceLineNo">658</span>    String splitPolicy = null;<a name="line.658"></a>
<span class="sourceLineNo">659</span>    Compression.Algorithm compression = Compression.Algorithm.NONE;<a name="line.659"></a>
<span class="sourceLineNo">660</span>    BloomType bloomType = BloomType.ROW;<a name="line.660"></a>
<span class="sourceLineNo">661</span>    int blockSize = HConstants.DEFAULT_BLOCKSIZE;<a name="line.661"></a>
<span class="sourceLineNo">662</span>    DataBlockEncoding blockEncoding = DataBlockEncoding.NONE;<a name="line.662"></a>
<span class="sourceLineNo">663</span>    boolean valueRandom = false;<a name="line.663"></a>
<span class="sourceLineNo">664</span>    boolean valueZipf = false;<a name="line.664"></a>
<span class="sourceLineNo">665</span>    int valueSize = DEFAULT_VALUE_LENGTH;<a name="line.665"></a>
<span class="sourceLineNo">666</span>    int period = (this.perClientRunRows / 10) == 0? perClientRunRows: perClientRunRows / 10;<a name="line.666"></a>
<span class="sourceLineNo">667</span>    int cycles = 1;<a name="line.667"></a>
<span class="sourceLineNo">668</span>    int columns = 1;<a name="line.668"></a>
<span class="sourceLineNo">669</span>    int families = 1;<a name="line.669"></a>
<span class="sourceLineNo">670</span>    int caching = 30;<a name="line.670"></a>
<span class="sourceLineNo">671</span>    boolean addColumns = true;<a name="line.671"></a>
<span class="sourceLineNo">672</span>    MemoryCompactionPolicy inMemoryCompaction =<a name="line.672"></a>
<span class="sourceLineNo">673</span>        MemoryCompactionPolicy.valueOf(<a name="line.673"></a>
<span class="sourceLineNo">674</span>            CompactingMemStore.COMPACTING_MEMSTORE_TYPE_DEFAULT);<a name="line.674"></a>
<span class="sourceLineNo">675</span>    boolean asyncPrefetch = false;<a name="line.675"></a>
<span class="sourceLineNo">676</span>    boolean cacheBlocks = true;<a name="line.676"></a>
<span class="sourceLineNo">677</span>    Scan.ReadType scanReadType = Scan.ReadType.DEFAULT;<a name="line.677"></a>
<span class="sourceLineNo">678</span>    long bufferSize = 2l * 1024l * 1024l;<a name="line.678"></a>
<span class="sourceLineNo">679</span><a name="line.679"></a>
<span class="sourceLineNo">680</span>    public TestOptions() {}<a name="line.680"></a>
<span class="sourceLineNo">681</span><a name="line.681"></a>
<span class="sourceLineNo">682</span>    /**<a name="line.682"></a>
<span class="sourceLineNo">683</span>     * Clone constructor.<a name="line.683"></a>
<span class="sourceLineNo">684</span>     * @param that Object to copy from.<a name="line.684"></a>
<span class="sourceLineNo">685</span>     */<a name="line.685"></a>
<span class="sourceLineNo">686</span>    public TestOptions(TestOptions that) {<a name="line.686"></a>
<span class="sourceLineNo">687</span>      this.cmdName = that.cmdName;<a name="line.687"></a>
<span class="sourceLineNo">688</span>      this.cycles = that.cycles;<a name="line.688"></a>
<span class="sourceLineNo">689</span>      this.nomapred = that.nomapred;<a name="line.689"></a>
<span class="sourceLineNo">690</span>      this.startRow = that.startRow;<a name="line.690"></a>
<span class="sourceLineNo">691</span>      this.size = that.size;<a name="line.691"></a>
<span class="sourceLineNo">692</span>      this.perClientRunRows = that.perClientRunRows;<a name="line.692"></a>
<span class="sourceLineNo">693</span>      this.numClientThreads = that.numClientThreads;<a name="line.693"></a>
<span class="sourceLineNo">694</span>      this.totalRows = that.totalRows;<a name="line.694"></a>
<span class="sourceLineNo">695</span>      this.sampleRate = that.sampleRate;<a name="line.695"></a>
<span class="sourceLineNo">696</span>      this.traceRate = that.traceRate;<a name="line.696"></a>
<span class="sourceLineNo">697</span>      this.tableName = that.tableName;<a name="line.697"></a>
<span class="sourceLineNo">698</span>      this.flushCommits = that.flushCommits;<a name="line.698"></a>
<span class="sourceLineNo">699</span>      this.writeToWAL = that.writeToWAL;<a name="line.699"></a>
<span class="sourceLineNo">700</span>      this.autoFlush = that.autoFlush;<a name="line.700"></a>
<span class="sourceLineNo">701</span>      this.oneCon = that.oneCon;<a name="line.701"></a>
<span class="sourceLineNo">702</span>      this.useTags = that.useTags;<a name="line.702"></a>
<span class="sourceLineNo">703</span>      this.noOfTags = that.noOfTags;<a name="line.703"></a>
<span class="sourceLineNo">704</span>      this.reportLatency = that.reportLatency;<a name="line.704"></a>
<span class="sourceLineNo">705</span>      this.multiGet = that.multiGet;<a name="line.705"></a>
<span class="sourceLineNo">706</span>      this.inMemoryCF = that.inMemoryCF;<a name="line.706"></a>
<span class="sourceLineNo">707</span>      this.presplitRegions = that.presplitRegions;<a name="line.707"></a>
<span class="sourceLineNo">708</span>      this.replicas = that.replicas;<a name="line.708"></a>
<span class="sourceLineNo">709</span>      this.splitPolicy = that.splitPolicy;<a name="line.709"></a>
<span class="sourceLineNo">710</span>      this.compression = that.compression;<a name="line.710"></a>
<span class="sourceLineNo">711</span>      this.blockEncoding = that.blockEncoding;<a name="line.711"></a>
<span class="sourceLineNo">712</span>      this.filterAll = that.filterAll;<a name="line.712"></a>
<span class="sourceLineNo">713</span>      this.bloomType = that.bloomType;<a name="line.713"></a>
<span class="sourceLineNo">714</span>      this.blockSize = that.blockSize;<a name="line.714"></a>
<span class="sourceLineNo">715</span>      this.valueRandom = that.valueRandom;<a name="line.715"></a>
<span class="sourceLineNo">716</span>      this.valueZipf = that.valueZipf;<a name="line.716"></a>
<span class="sourceLineNo">717</span>      this.valueSize = that.valueSize;<a name="line.717"></a>
<span class="sourceLineNo">718</span>      this.period = that.period;<a name="line.718"></a>
<span class="sourceLineNo">719</span>      this.randomSleep = that.randomSleep;<a name="line.719"></a>
<span class="sourceLineNo">720</span>      this.measureAfter = that.measureAfter;<a name="line.720"></a>
<span class="sourceLineNo">721</span>      this.addColumns = that.addColumns;<a name="line.721"></a>
<span class="sourceLineNo">722</span>      this.columns = that.columns;<a name="line.722"></a>
<span class="sourceLineNo">723</span>      this.families = that.families;<a name="line.723"></a>
<span class="sourceLineNo">724</span>      this.caching = that.caching;<a name="line.724"></a>
<span class="sourceLineNo">725</span>      this.inMemoryCompaction = that.inMemoryCompaction;<a name="line.725"></a>
<span class="sourceLineNo">726</span>      this.asyncPrefetch = that.asyncPrefetch;<a name="line.726"></a>
<span class="sourceLineNo">727</span>      this.cacheBlocks = that.cacheBlocks;<a name="line.727"></a>
<span class="sourceLineNo">728</span>      this.scanReadType = that.scanReadType;<a name="line.728"></a>
<span class="sourceLineNo">729</span>      this.bufferSize = that.bufferSize;<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>    public int getCaching() {<a name="line.732"></a>
<span class="sourceLineNo">733</span>      return this.caching;<a name="line.733"></a>
<span class="sourceLineNo">734</span>    }<a name="line.734"></a>
<span class="sourceLineNo">735</span><a name="line.735"></a>
<span class="sourceLineNo">736</span>    public void setCaching(final int caching) {<a name="line.736"></a>
<span class="sourceLineNo">737</span>      this.caching = caching;<a name="line.737"></a>
<span class="sourceLineNo">738</span>    }<a name="line.738"></a>
<span class="sourceLineNo">739</span><a name="line.739"></a>
<span class="sourceLineNo">740</span>    public int getColumns() {<a name="line.740"></a>
<span class="sourceLineNo">741</span>      return this.columns;<a name="line.741"></a>
<span class="sourceLineNo">742</span>    }<a name="line.742"></a>
<span class="sourceLineNo">743</span><a name="line.743"></a>
<span class="sourceLineNo">744</span>    public void setColumns(final int columns) {<a name="line.744"></a>
<span class="sourceLineNo">745</span>      this.columns = columns;<a name="line.745"></a>
<span class="sourceLineNo">746</span>    }<a name="line.746"></a>
<span class="sourceLineNo">747</span><a name="line.747"></a>
<span class="sourceLineNo">748</span>    public int getFamilies() {<a name="line.748"></a>
<span class="sourceLineNo">749</span>      return this.families;<a name="line.749"></a>
<span class="sourceLineNo">750</span>    }<a name="line.750"></a>
<span class="sourceLineNo">751</span><a name="line.751"></a>
<span class="sourceLineNo">752</span>    public void setFamilies(final int families) {<a name="line.752"></a>
<span class="sourceLineNo">753</span>      this.families = families;<a name="line.753"></a>
<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
<span class="sourceLineNo">755</span><a name="line.755"></a>
<span class="sourceLineNo">756</span>    public int getCycles() {<a name="line.756"></a>
<span class="sourceLineNo">757</span>      return this.cycles;<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>    public void setCycles(final int cycles) {<a name="line.760"></a>
<span class="sourceLineNo">761</span>      this.cycles = cycles;<a name="line.761"></a>
<span class="sourceLineNo">762</span>    }<a name="line.762"></a>
<span class="sourceLineNo">763</span><a name="line.763"></a>
<span class="sourceLineNo">764</span>    public boolean isValueZipf() {<a name="line.764"></a>
<span class="sourceLineNo">765</span>      return valueZipf;<a name="line.765"></a>
<span class="sourceLineNo">766</span>    }<a name="line.766"></a>
<span class="sourceLineNo">767</span><a name="line.767"></a>
<span class="sourceLineNo">768</span>    public void setValueZipf(boolean valueZipf) {<a name="line.768"></a>
<span class="sourceLineNo">769</span>      this.valueZipf = valueZipf;<a name="line.769"></a>
<span class="sourceLineNo">770</span>    }<a name="line.770"></a>
<span class="sourceLineNo">771</span><a name="line.771"></a>
<span class="sourceLineNo">772</span>    public String getCmdName() {<a name="line.772"></a>
<span class="sourceLineNo">773</span>      return cmdName;<a name="line.773"></a>
<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
<span class="sourceLineNo">775</span><a name="line.775"></a>
<span class="sourceLineNo">776</span>    public void setCmdName(String cmdName) {<a name="line.776"></a>
<span class="sourceLineNo">777</span>      this.cmdName = cmdName;<a name="line.777"></a>
<span class="sourceLineNo">778</span>    }<a name="line.778"></a>
<span class="sourceLineNo">779</span><a name="line.779"></a>
<span class="sourceLineNo">780</span>    public int getRandomSleep() {<a name="line.780"></a>
<span class="sourceLineNo">781</span>      return randomSleep;<a name="line.781"></a>
<span class="sourceLineNo">782</span>    }<a name="line.782"></a>
<span class="sourceLineNo">783</span><a name="line.783"></a>
<span class="sourceLineNo">784</span>    public void setRandomSleep(int randomSleep) {<a name="line.784"></a>
<span class="sourceLineNo">785</span>      this.randomSleep = randomSleep;<a name="line.785"></a>
<span class="sourceLineNo">786</span>    }<a name="line.786"></a>
<span class="sourceLineNo">787</span><a name="line.787"></a>
<span class="sourceLineNo">788</span>    public int getReplicas() {<a name="line.788"></a>
<span class="sourceLineNo">789</span>      return replicas;<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>    public void setReplicas(int replicas) {<a name="line.792"></a>
<span class="sourceLineNo">793</span>      this.replicas = replicas;<a name="line.793"></a>
<span class="sourceLineNo">794</span>    }<a name="line.794"></a>
<span class="sourceLineNo">795</span><a name="line.795"></a>
<span class="sourceLineNo">796</span>    public String getSplitPolicy() {<a name="line.796"></a>
<span class="sourceLineNo">797</span>      return splitPolicy;<a name="line.797"></a>
<span class="sourceLineNo">798</span>    }<a name="line.798"></a>
<span class="sourceLineNo">799</span><a name="line.799"></a>
<span class="sourceLineNo">800</span>    public void setSplitPolicy(String splitPolicy) {<a name="line.800"></a>
<span class="sourceLineNo">801</span>      this.splitPolicy = splitPolicy;<a name="line.801"></a>
<span class="sourceLineNo">802</span>    }<a name="line.802"></a>
<span class="sourceLineNo">803</span><a name="line.803"></a>
<span class="sourceLineNo">804</span>    public void setNomapred(boolean nomapred) {<a name="line.804"></a>
<span class="sourceLineNo">805</span>      this.nomapred = nomapred;<a name="line.805"></a>
<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
<span class="sourceLineNo">807</span><a name="line.807"></a>
<span class="sourceLineNo">808</span>    public void setFilterAll(boolean filterAll) {<a name="line.808"></a>
<span class="sourceLineNo">809</span>      this.filterAll = filterAll;<a name="line.809"></a>
<span class="sourceLineNo">810</span>    }<a name="line.810"></a>
<span class="sourceLineNo">811</span><a name="line.811"></a>
<span class="sourceLineNo">812</span>    public void setStartRow(int startRow) {<a name="line.812"></a>
<span class="sourceLineNo">813</span>      this.startRow = startRow;<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>    public void setSize(float size) {<a name="line.816"></a>
<span class="sourceLineNo">817</span>      this.size = size;<a name="line.817"></a>
<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
<span class="sourceLineNo">819</span><a name="line.819"></a>
<span class="sourceLineNo">820</span>    public void setPerClientRunRows(int perClientRunRows) {<a name="line.820"></a>
<span class="sourceLineNo">821</span>      this.perClientRunRows = perClientRunRows;<a name="line.821"></a>
<span class="sourceLineNo">822</span>    }<a name="line.822"></a>
<span class="sourceLineNo">823</span><a name="line.823"></a>
<span class="sourceLineNo">824</span>    public void setNumClientThreads(int numClientThreads) {<a name="line.824"></a>
<span class="sourceLineNo">825</span>      this.numClientThreads = numClientThreads;<a name="line.825"></a>
<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
<span class="sourceLineNo">827</span><a name="line.827"></a>
<span class="sourceLineNo">828</span>    public void setTotalRows(int totalRows) {<a name="line.828"></a>
<span class="sourceLineNo">829</span>      this.totalRows = totalRows;<a name="line.829"></a>
<span class="sourceLineNo">830</span>    }<a name="line.830"></a>
<span class="sourceLineNo">831</span><a name="line.831"></a>
<span class="sourceLineNo">832</span>    public void setSampleRate(float sampleRate) {<a name="line.832"></a>
<span class="sourceLineNo">833</span>      this.sampleRate = sampleRate;<a name="line.833"></a>
<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
<span class="sourceLineNo">835</span><a name="line.835"></a>
<span class="sourceLineNo">836</span>    public void setTraceRate(double traceRate) {<a name="line.836"></a>
<span class="sourceLineNo">837</span>      this.traceRate = traceRate;<a name="line.837"></a>
<span class="sourceLineNo">838</span>    }<a name="line.838"></a>
<span class="sourceLineNo">839</span><a name="line.839"></a>
<span class="sourceLineNo">840</span>    public void setTableName(String tableName) {<a name="line.840"></a>
<span class="sourceLineNo">841</span>      this.tableName = tableName;<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>    public void setFlushCommits(boolean flushCommits) {<a name="line.844"></a>
<span class="sourceLineNo">845</span>      this.flushCommits = flushCommits;<a name="line.845"></a>
<span class="sourceLineNo">846</span>    }<a name="line.846"></a>
<span class="sourceLineNo">847</span><a name="line.847"></a>
<span class="sourceLineNo">848</span>    public void setWriteToWAL(boolean writeToWAL) {<a name="line.848"></a>
<span class="sourceLineNo">849</span>      this.writeToWAL = writeToWAL;<a name="line.849"></a>
<span class="sourceLineNo">850</span>    }<a name="line.850"></a>
<span class="sourceLineNo">851</span><a name="line.851"></a>
<span class="sourceLineNo">852</span>    public void setAutoFlush(boolean autoFlush) {<a name="line.852"></a>
<span class="sourceLineNo">853</span>      this.autoFlush = autoFlush;<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>    public void setOneCon(boolean oneCon) {<a name="line.856"></a>
<span class="sourceLineNo">857</span>      this.oneCon = oneCon;<a name="line.857"></a>
<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
<span class="sourceLineNo">859</span><a name="line.859"></a>
<span class="sourceLineNo">860</span>    public void setUseTags(boolean useTags) {<a name="line.860"></a>
<span class="sourceLineNo">861</span>      this.useTags = useTags;<a name="line.861"></a>
<span class="sourceLineNo">862</span>    }<a name="line.862"></a>
<span class="sourceLineNo">863</span><a name="line.863"></a>
<span class="sourceLineNo">864</span>    public void setNoOfTags(int noOfTags) {<a name="line.864"></a>
<span class="sourceLineNo">865</span>      this.noOfTags = noOfTags;<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>    public void setReportLatency(boolean reportLatency) {<a name="line.868"></a>
<span class="sourceLineNo">869</span>      this.reportLatency = reportLatency;<a name="line.869"></a>
<span class="sourceLineNo">870</span>    }<a name="line.870"></a>
<span class="sourceLineNo">871</span><a name="line.871"></a>
<span class="sourceLineNo">872</span>    public void setMultiGet(int multiGet) {<a name="line.872"></a>
<span class="sourceLineNo">873</span>      this.multiGet = multiGet;<a name="line.873"></a>
<span class="sourceLineNo">874</span>    }<a name="line.874"></a>
<span class="sourceLineNo">875</span><a name="line.875"></a>
<span class="sourceLineNo">876</span>    public void setInMemoryCF(boolean inMemoryCF) {<a name="line.876"></a>
<span class="sourceLineNo">877</span>      this.inMemoryCF = inMemoryCF;<a name="line.877"></a>
<span class="sourceLineNo">878</span>    }<a name="line.878"></a>
<span class="sourceLineNo">879</span><a name="line.879"></a>
<span class="sourceLineNo">880</span>    public void setPresplitRegions(int presplitRegions) {<a name="line.880"></a>
<span class="sourceLineNo">881</span>      this.presplitRegions = presplitRegions;<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>    public void setCompression(Compression.Algorithm compression) {<a name="line.884"></a>
<span class="sourceLineNo">885</span>      this.compression = compression;<a name="line.885"></a>
<span class="sourceLineNo">886</span>    }<a name="line.886"></a>
<span class="sourceLineNo">887</span><a name="line.887"></a>
<span class="sourceLineNo">888</span>    public void setBloomType(BloomType bloomType) {<a name="line.888"></a>
<span class="sourceLineNo">889</span>      this.bloomType = bloomType;<a name="line.889"></a>
<span class="sourceLineNo">890</span>    }<a name="line.890"></a>
<span class="sourceLineNo">891</span><a name="line.891"></a>
<span class="sourceLineNo">892</span>    public void setBlockSize(int blockSize) {<a name="line.892"></a>
<span class="sourceLineNo">893</span>      this.blockSize = blockSize;<a name="line.893"></a>
<span class="sourceLineNo">894</span>    }<a name="line.894"></a>
<span class="sourceLineNo">895</span><a name="line.895"></a>
<span class="sourceLineNo">896</span>    public void setBlockEncoding(DataBlockEncoding blockEncoding) {<a name="line.896"></a>
<span class="sourceLineNo">897</span>      this.blockEncoding = blockEncoding;<a name="line.897"></a>
<span class="sourceLineNo">898</span>    }<a name="line.898"></a>
<span class="sourceLineNo">899</span><a name="line.899"></a>
<span class="sourceLineNo">900</span>    public void setValueRandom(boolean valueRandom) {<a name="line.900"></a>
<span class="sourceLineNo">901</span>      this.valueRandom = valueRandom;<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>    public void setValueSize(int valueSize) {<a name="line.904"></a>
<span class="sourceLineNo">905</span>      this.valueSize = valueSize;<a name="line.905"></a>
<span class="sourceLineNo">906</span>    }<a name="line.906"></a>
<span class="sourceLineNo">907</span><a name="line.907"></a>
<span class="sourceLineNo">908</span>    public void setBufferSize(long bufferSize) {<a name="line.908"></a>
<span class="sourceLineNo">909</span>      this.bufferSize = bufferSize;<a name="line.909"></a>
<span class="sourceLineNo">910</span>    }<a name="line.910"></a>
<span class="sourceLineNo">911</span><a name="line.911"></a>
<span class="sourceLineNo">912</span>    public void setPeriod(int period) {<a name="line.912"></a>
<span class="sourceLineNo">913</span>      this.period = period;<a name="line.913"></a>
<span class="sourceLineNo">914</span>    }<a name="line.914"></a>
<span class="sourceLineNo">915</span><a name="line.915"></a>
<span class="sourceLineNo">916</span>    public boolean isNomapred() {<a name="line.916"></a>
<span class="sourceLineNo">917</span>      return nomapred;<a name="line.917"></a>
<span class="sourceLineNo">918</span>    }<a name="line.918"></a>
<span class="sourceLineNo">919</span><a name="line.919"></a>
<span class="sourceLineNo">920</span>    public boolean isFilterAll() {<a name="line.920"></a>
<span class="sourceLineNo">921</span>      return filterAll;<a name="line.921"></a>
<span class="sourceLineNo">922</span>    }<a name="line.922"></a>
<span class="sourceLineNo">923</span><a name="line.923"></a>
<span class="sourceLineNo">924</span>    public int getStartRow() {<a name="line.924"></a>
<span class="sourceLineNo">925</span>      return startRow;<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>    public float getSize() {<a name="line.928"></a>
<span class="sourceLineNo">929</span>      return size;<a name="line.929"></a>
<span class="sourceLineNo">930</span>    }<a name="line.930"></a>
<span class="sourceLineNo">931</span><a name="line.931"></a>
<span class="sourceLineNo">932</span>    public int getPerClientRunRows() {<a name="line.932"></a>
<span class="sourceLineNo">933</span>      return perClientRunRows;<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>    public int getNumClientThreads() {<a name="line.936"></a>
<span class="sourceLineNo">937</span>      return numClientThreads;<a name="line.937"></a>
<span class="sourceLineNo">938</span>    }<a name="line.938"></a>
<span class="sourceLineNo">939</span><a name="line.939"></a>
<span class="sourceLineNo">940</span>    public int getTotalRows() {<a name="line.940"></a>
<span class="sourceLineNo">941</span>      return totalRows;<a name="line.941"></a>
<span class="sourceLineNo">942</span>    }<a name="line.942"></a>
<span class="sourceLineNo">943</span><a name="line.943"></a>
<span class="sourceLineNo">944</span>    public float getSampleRate() {<a name="line.944"></a>
<span class="sourceLineNo">945</span>      return sampleRate;<a name="line.945"></a>
<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
<span class="sourceLineNo">947</span><a name="line.947"></a>
<span class="sourceLineNo">948</span>    public double getTraceRate() {<a name="line.948"></a>
<span class="sourceLineNo">949</span>      return traceRate;<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>    public String getTableName() {<a name="line.952"></a>
<span class="sourceLineNo">953</span>      return tableName;<a name="line.953"></a>
<span class="sourceLineNo">954</span>    }<a name="line.954"></a>
<span class="sourceLineNo">955</span><a name="line.955"></a>
<span class="sourceLineNo">956</span>    public boolean isFlushCommits() {<a name="line.956"></a>
<span class="sourceLineNo">957</span>      return flushCommits;<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>    public boolean isWriteToWAL() {<a name="line.960"></a>
<span class="sourceLineNo">961</span>      return writeToWAL;<a name="line.961"></a>
<span class="sourceLineNo">962</span>    }<a name="line.962"></a>
<span class="sourceLineNo">963</span><a name="line.963"></a>
<span class="sourceLineNo">964</span>    public boolean isAutoFlush() {<a name="line.964"></a>
<span class="sourceLineNo">965</span>      return autoFlush;<a name="line.965"></a>
<span class="sourceLineNo">966</span>    }<a name="line.966"></a>
<span class="sourceLineNo">967</span><a name="line.967"></a>
<span class="sourceLineNo">968</span>    public boolean isUseTags() {<a name="line.968"></a>
<span class="sourceLineNo">969</span>      return useTags;<a name="line.969"></a>
<span class="sourceLineNo">970</span>    }<a name="line.970"></a>
<span class="sourceLineNo">971</span><a name="line.971"></a>
<span class="sourceLineNo">972</span>    public int getNoOfTags() {<a name="line.972"></a>
<span class="sourceLineNo">973</span>      return noOfTags;<a name="line.973"></a>
<span class="sourceLineNo">974</span>    }<a name="line.974"></a>
<span class="sourceLineNo">975</span><a name="line.975"></a>
<span class="sourceLineNo">976</span>    public boolean isReportLatency() {<a name="line.976"></a>
<span class="sourceLineNo">977</span>      return reportLatency;<a name="line.977"></a>
<span class="sourceLineNo">978</span>    }<a name="line.978"></a>
<span class="sourceLineNo">979</span><a name="line.979"></a>
<span class="sourceLineNo">980</span>    public int getMultiGet() {<a name="line.980"></a>
<span class="sourceLineNo">981</span>      return multiGet;<a name="line.981"></a>
<span class="sourceLineNo">982</span>    }<a name="line.982"></a>
<span class="sourceLineNo">983</span><a name="line.983"></a>
<span class="sourceLineNo">984</span>    public boolean isInMemoryCF() {<a name="line.984"></a>
<span class="sourceLineNo">985</span>      return inMemoryCF;<a name="line.985"></a>
<span class="sourceLineNo">986</span>    }<a name="line.986"></a>
<span class="sourceLineNo">987</span><a name="line.987"></a>
<span class="sourceLineNo">988</span>    public int getPresplitRegions() {<a name="line.988"></a>
<span class="sourceLineNo">989</span>      return presplitRegions;<a name="line.989"></a>
<span class="sourceLineNo">990</span>    }<a name="line.990"></a>
<span class="sourceLineNo">991</span><a name="line.991"></a>
<span class="sourceLineNo">992</span>    public Compression.Algorithm getCompression() {<a name="line.992"></a>
<span class="sourceLineNo">993</span>      return compression;<a name="line.993"></a>
<span class="sourceLineNo">994</span>    }<a name="line.994"></a>
<span class="sourceLineNo">995</span><a name="line.995"></a>
<span class="sourceLineNo">996</span>    public DataBlockEncoding getBlockEncoding() {<a name="line.996"></a>
<span class="sourceLineNo">997</span>      return blockEncoding;<a name="line.997"></a>
<span class="sourceLineNo">998</span>    }<a name="line.998"></a>
<span class="sourceLineNo">999</span><a name="line.999"></a>
<span class="sourceLineNo">1000</span>    public boolean isValueRandom() {<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>      return valueRandom;<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>    }<a name="line.1002"></a>
<span class="sourceLineNo">1003</span><a name="line.1003"></a>
<span class="sourceLineNo">1004</span>    public int getValueSize() {<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>      return valueSize;<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>    }<a name="line.1006"></a>
<span class="sourceLineNo">1007</span><a name="line.1007"></a>
<span class="sourceLineNo">1008</span>    public int getPeriod() {<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>      return period;<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>    }<a name="line.1010"></a>
<span class="sourceLineNo">1011</span><a name="line.1011"></a>
<span class="sourceLineNo">1012</span>    public BloomType getBloomType() {<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>      return bloomType;<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>    }<a name="line.1014"></a>
<span class="sourceLineNo">1015</span><a name="line.1015"></a>
<span class="sourceLineNo">1016</span>    public int getBlockSize() {<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>      return blockSize;<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>    }<a name="line.1018"></a>
<span class="sourceLineNo">1019</span><a name="line.1019"></a>
<span class="sourceLineNo">1020</span>    public boolean isOneCon() {<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>      return oneCon;<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>    }<a name="line.1022"></a>
<span class="sourceLineNo">1023</span><a name="line.1023"></a>
<span class="sourceLineNo">1024</span>    public int getMeasureAfter() {<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>      return measureAfter;<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>    }<a name="line.1026"></a>
<span class="sourceLineNo">1027</span><a name="line.1027"></a>
<span class="sourceLineNo">1028</span>    public void setMeasureAfter(int measureAfter) {<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>      this.measureAfter = measureAfter;<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>    }<a name="line.1030"></a>
<span class="sourceLineNo">1031</span><a name="line.1031"></a>
<span class="sourceLineNo">1032</span>    public boolean getAddColumns() {<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>      return addColumns;<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>    }<a name="line.1034"></a>
<span class="sourceLineNo">1035</span><a name="line.1035"></a>
<span class="sourceLineNo">1036</span>    public void setAddColumns(boolean addColumns) {<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>      this.addColumns = addColumns;<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>    }<a name="line.1038"></a>
<span class="sourceLineNo">1039</span><a name="line.1039"></a>
<span class="sourceLineNo">1040</span>    public void setInMemoryCompaction(MemoryCompactionPolicy inMemoryCompaction) {<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>      this.inMemoryCompaction = inMemoryCompaction;<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>    }<a name="line.1042"></a>
<span class="sourceLineNo">1043</span><a name="line.1043"></a>
<span class="sourceLineNo">1044</span>    public MemoryCompactionPolicy getInMemoryCompaction() {<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>      return this.inMemoryCompaction;<a name="line.1045"></a>
<span class="sourceLineNo">1046</span>    }<a name="line.1046"></a>
<span class="sourceLineNo">1047</span><a name="line.1047"></a>
<span class="sourceLineNo">1048</span>    public long getBufferSize() {<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>      return this.bufferSize;<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>  }<a name="line.1051"></a>
<span class="sourceLineNo">1052</span><a name="line.1052"></a>
<span class="sourceLineNo">1053</span>  /*<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>   * A test.<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>   * Subclass to particularize what happens per row.<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>   */<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>  static abstract class TestBase {<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>    // Below is make it so when Tests are all running in the one<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>    // jvm, that they each have a differently seeded Random.<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>    private static final Random randomSeed = new Random(System.currentTimeMillis());<a name="line.1060"></a>
<span class="sourceLineNo">1061</span><a name="line.1061"></a>
<span class="sourceLineNo">1062</span>    private static long nextRandomSeed() {<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>      return randomSeed.nextLong();<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>    private final int everyN;<a name="line.1065"></a>
<span class="sourceLineNo">1066</span><a name="line.1066"></a>
<span class="sourceLineNo">1067</span>    protected final Random rand = new Random(nextRandomSeed());<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>    protected final Configuration conf;<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>    protected final TestOptions opts;<a name="line.1069"></a>
<span class="sourceLineNo">1070</span><a name="line.1070"></a>
<span class="sourceLineNo">1071</span>    private final Status status;<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>    private final Sampler traceSampler;<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>    private final SpanReceiverHost receiverHost;<a name="line.1073"></a>
<span class="sourceLineNo">1074</span><a name="line.1074"></a>
<span class="sourceLineNo">1075</span>    private String testName;<a name="line.1075"></a>
<span class="sourceLineNo">1076</span>    private Histogram latencyHistogram;<a name="line.1076"></a>
<span class="sourceLineNo">1077</span>    private Histogram valueSizeHistogram;<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>    private Histogram rpcCallsHistogram;<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>    private Histogram remoteRpcCallsHistogram;<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>    private Histogram millisBetweenNextHistogram;<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>    private Histogram regionsScannedHistogram;<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>    private Histogram bytesInResultsHistogram;<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>    private Histogram bytesInRemoteResultsHistogram;<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>    private RandomDistribution.Zipf zipf;<a name="line.1084"></a>
<span class="sourceLineNo">1085</span><a name="line.1085"></a>
<span class="sourceLineNo">1086</span>    /**<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>     * Note that all subclasses of this class must provide a public constructor<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>     * that has the exact same list of arguments.<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>     */<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>    TestBase(final Configuration conf, final TestOptions options, final Status status) {<a name="line.1090"></a>
<span class="sourceLineNo">1091</span>      this.conf = conf;<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>      this.receiverHost = this.conf == null? null: SpanReceiverHost.getInstance(conf);<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>      this.opts = options;<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>      this.status = status;<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>      this.testName = this.getClass().getSimpleName();<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>      if (options.traceRate &gt;= 1.0) {<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>        this.traceSampler = Sampler.ALWAYS;<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>      } else if (options.traceRate &gt; 0.0) {<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>        conf.setDouble("hbase.sampler.fraction", options.traceRate);<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>        this.traceSampler = new ProbabilitySampler(new HBaseHTraceConfiguration(conf));<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>      } else {<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>        this.traceSampler = Sampler.NEVER;<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>      }<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>      everyN = (int) (opts.totalRows / (opts.totalRows * opts.sampleRate));<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>      if (options.isValueZipf()) {<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>        this.zipf = new RandomDistribution.Zipf(this.rand, 1, options.getValueSize(), 1.2);<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>      }<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>      LOG.info("Sampling 1 every " + everyN + " out of " + opts.perClientRunRows + " total rows.");<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>    }<a name="line.1109"></a>
<span class="sourceLineNo">1110</span><a name="line.1110"></a>
<span class="sourceLineNo">1111</span>    int getValueLength(final Random r) {<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>      if (this.opts.isValueRandom()) {<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>        return r.nextInt(opts.valueSize);<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>      } else if (this.opts.isValueZipf()) {<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>        return Math.abs(this.zipf.nextInt());<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>      } else {<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>        return opts.valueSize;<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>      }<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>    }<a name="line.1119"></a>
<span class="sourceLineNo">1120</span><a name="line.1120"></a>
<span class="sourceLineNo">1121</span>    void updateValueSize(final Result [] rs) throws IOException {<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>      if (rs == null || !isRandomValueSize()) return;<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>      for (Result r: rs) updateValueSize(r);<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>    }<a name="line.1124"></a>
<span class="sourceLineNo">1125</span><a name="line.1125"></a>
<span class="sourceLineNo">1126</span>    void updateValueSize(final Result r) throws IOException {<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>      if (r == null || !isRandomValueSize()) return;<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>      int size = 0;<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>      for (CellScanner scanner = r.cellScanner(); scanner.advance();) {<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>        size += scanner.current().getValueLength();<a name="line.1130"></a>
<span class="sourceLineNo">1131</span>      }<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>      updateValueSize(size);<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>    }<a name="line.1133"></a>
<span class="sourceLineNo">1134</span><a name="line.1134"></a>
<span class="sourceLineNo">1135</span>    void updateValueSize(final int valueSize) {<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>      if (!isRandomValueSize()) return;<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>      this.valueSizeHistogram.update(valueSize);<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>    }<a name="line.1138"></a>
<span class="sourceLineNo">1139</span><a name="line.1139"></a>
<span class="sourceLineNo">1140</span>    void updateScanMetrics(final ScanMetrics metrics) {<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>      if (metrics == null) return;<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>      Map&lt;String,Long&gt; metricsMap = metrics.getMetricsMap();<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>      Long rpcCalls = metricsMap.get(ScanMetrics.RPC_CALLS_METRIC_NAME);<a name="line.1143"></a>
<span class="sourceLineNo">1144</span>      if (rpcCalls != null) {<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>        this.rpcCallsHistogram.update(rpcCalls.longValue());<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>      }<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>      Long remoteRpcCalls = metricsMap.get(ScanMetrics.REMOTE_RPC_CALLS_METRIC_NAME);<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>      if (remoteRpcCalls != null) {<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>        this.remoteRpcCallsHistogram.update(remoteRpcCalls.longValue());<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>      }<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>      Long millisBetweenNext = metricsMap.get(ScanMetrics.MILLIS_BETWEEN_NEXTS_METRIC_NAME);<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>      if (millisBetweenNext != null) {<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>        this.millisBetweenNextHistogram.update(millisBetweenNext.longValue());<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>      }<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>      Long regionsScanned = metricsMap.get(ScanMetrics.REGIONS_SCANNED_METRIC_NAME);<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>      if (regionsScanned != null) {<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>        this.regionsScannedHistogram.update(regionsScanned.longValue());<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>      }<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>      Long bytesInResults = metricsMap.get(ScanMetrics.BYTES_IN_RESULTS_METRIC_NAME);<a name="line.1159"></a>
<span class="sourceLineNo">1160</span>      if (bytesInResults != null &amp;&amp; bytesInResults.longValue() &gt; 0) {<a name="line.1160"></a>
<span class="sourceLineNo">1161</span>        this.bytesInResultsHistogram.update(bytesInResults.longValue());<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>      }<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>      Long bytesInRemoteResults = metricsMap.get(ScanMetrics.BYTES_IN_REMOTE_RESULTS_METRIC_NAME);<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>      if (bytesInRemoteResults != null &amp;&amp; bytesInRemoteResults.longValue() &gt; 0) {<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>        this.bytesInRemoteResultsHistogram.update(bytesInRemoteResults.longValue());<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>      }<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>    }<a name="line.1167"></a>
<span class="sourceLineNo">1168</span><a name="line.1168"></a>
<span class="sourceLineNo">1169</span>    String generateStatus(final int sr, final int i, final int lr) {<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>      return sr + "/" + i + "/" + lr + ", latency " + getShortLatencyReport() +<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>        (!isRandomValueSize()? "": ", value size " + getShortValueSizeReport());<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
<span class="sourceLineNo">1173</span><a name="line.1173"></a>
<span class="sourceLineNo">1174</span>    boolean isRandomValueSize() {<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>      return opts.valueRandom;<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>    }<a name="line.1176"></a>
<span class="sourceLineNo">1177</span><a name="line.1177"></a>
<span class="sourceLineNo">1178</span>    protected int getReportingPeriod() {<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>      return opts.period;<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>    }<a name="line.1180"></a>
<span class="sourceLineNo">1181</span><a name="line.1181"></a>
<span class="sourceLineNo">1182</span>    /**<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>     * Populated by testTakedown. Only implemented by RandomReadTest at the moment.<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>     */<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>    public Histogram getLatencyHistogram() {<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>      return latencyHistogram;<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>    }<a name="line.1187"></a>
<span class="sourceLineNo">1188</span><a name="line.1188"></a>
<span class="sourceLineNo">1189</span>    void testSetup() throws IOException {<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>      // test metrics<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>      latencyHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>      valueSizeHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>      // scan metrics<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>      rpcCallsHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>      remoteRpcCallsHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>      millisBetweenNextHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>      regionsScannedHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>      bytesInResultsHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>      bytesInRemoteResultsHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1199"></a>
<span class="sourceLineNo">1200</span><a name="line.1200"></a>
<span class="sourceLineNo">1201</span>      createConnection();<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>      onStartup();<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>    }<a name="line.1203"></a>
<span class="sourceLineNo">1204</span><a name="line.1204"></a>
<span class="sourceLineNo">1205</span>    abstract void createConnection() throws IOException;<a name="line.1205"></a>
<span class="sourceLineNo">1206</span><a name="line.1206"></a>
<span class="sourceLineNo">1207</span>    abstract void onStartup() throws IOException;<a name="line.1207"></a>
<span class="sourceLineNo">1208</span><a name="line.1208"></a>
<span class="sourceLineNo">1209</span>    void testTakedown() throws IOException {<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>      onTakedown();<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>      // Print all stats for this thread continuously.<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>      // Synchronize on Test.class so different threads don't intermingle the<a name="line.1212"></a>
<span class="sourceLineNo">1213</span>      // output. We can't use 'this' here because each thread has its own instance of Test class.<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>      synchronized (Test.class) {<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>        status.setStatus("Test : " + testName + ", Thread : " + Thread.currentThread().getName());<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>        status.setStatus("Latency (us) : " + YammerHistogramUtils.getHistogramReport(<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>            latencyHistogram));<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>        status.setStatus("Num measures (latency) : " + latencyHistogram.getCount());<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>        status.setStatus(YammerHistogramUtils.getPrettyHistogramReport(latencyHistogram));<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>        status.setStatus("ValueSize (bytes) : "<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>            + YammerHistogramUtils.getHistogramReport(valueSizeHistogram));<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>        status.setStatus("Num measures (ValueSize): " + valueSizeHistogram.getCount());<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>        status.setStatus(YammerHistogramUtils.getPrettyHistogramReport(valueSizeHistogram));<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>        if (rpcCallsHistogram.getCount() &gt; 0) {<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>          status.setStatus("rpcCalls (count): " +<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>              YammerHistogramUtils.getHistogramReport(rpcCallsHistogram));<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>        }<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>        if (remoteRpcCallsHistogram.getCount() &gt; 0) {<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>          status.setStatus("remoteRpcCalls (count): " +<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>              YammerHistogramUtils.getHistogramReport(remoteRpcCallsHistogram));<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>        }<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>        if (millisBetweenNextHistogram.getCount() &gt; 0) {<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>          status.setStatus("millisBetweenNext (latency): " +<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>              YammerHistogramUtils.getHistogramReport(millisBetweenNextHistogram));<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>        }<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>        if (regionsScannedHistogram.getCount() &gt; 0) {<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>          status.setStatus("regionsScanned (count): " +<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>              YammerHistogramUtils.getHistogramReport(regionsScannedHistogram));<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>        }<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>        if (bytesInResultsHistogram.getCount() &gt; 0) {<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>          status.setStatus("bytesInResults (size): " +<a name="line.1241"></a>
<span class="sourceLineNo">1242</span>              YammerHistogramUtils.getHistogramReport(bytesInResultsHistogram));<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>        }<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>        if (bytesInRemoteResultsHistogram.getCount() &gt; 0) {<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>          status.setStatus("bytesInRemoteResults (size): " +<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>              YammerHistogramUtils.getHistogramReport(bytesInRemoteResultsHistogram));<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>        }<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>      }<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>      closeConnection();<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>      receiverHost.closeReceivers();<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>    }<a name="line.1251"></a>
<span class="sourceLineNo">1252</span><a name="line.1252"></a>
<span class="sourceLineNo">1253</span>    abstract void onTakedown() throws IOException;<a name="line.1253"></a>
<span class="sourceLineNo">1254</span><a name="line.1254"></a>
<span class="sourceLineNo">1255</span>    abstract void closeConnection() throws IOException;<a name="line.1255"></a>
<span class="sourceLineNo">1256</span><a name="line.1256"></a>
<span class="sourceLineNo">1257</span>    /*<a name="line.1257"></a>
<span class="sourceLineNo">1258</span>     * Run test<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>     * @return Elapsed time.<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>     * @throws IOException<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>     */<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>    long test() throws IOException, InterruptedException {<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>      testSetup();<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>      LOG.info("Timed test starting in thread " + Thread.currentThread().getName());<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>      final long startTime = System.nanoTime();<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>      try {<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>        testTimed();<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>      } finally {<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>        testTakedown();<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>      }<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>      return (System.nanoTime() - startTime) / 1000000;<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>    }<a name="line.1272"></a>
<span class="sourceLineNo">1273</span><a name="line.1273"></a>
<span class="sourceLineNo">1274</span>    int getStartRow() {<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>      return opts.startRow;<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>    }<a name="line.1276"></a>
<span class="sourceLineNo">1277</span><a name="line.1277"></a>
<span class="sourceLineNo">1278</span>    int getLastRow() {<a name="line.1278"></a>
<span class="sourceLineNo">1279</span>      return getStartRow() + opts.perClientRunRows;<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>    }<a name="line.1280"></a>
<span class="sourceLineNo">1281</span><a name="line.1281"></a>
<span class="sourceLineNo">1282</span>    /**<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>     * Provides an extension point for tests that don't want a per row invocation.<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>     */<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>    void testTimed() throws IOException, InterruptedException {<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>      int startRow = getStartRow();<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>      int lastRow = getLastRow();<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>      TraceUtil.addSampler(traceSampler);<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>      // Report on completion of 1/10th of total.<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>      for (int ii = 0; ii &lt; opts.cycles; ii++) {<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>        if (opts.cycles &gt; 1) LOG.info("Cycle=" + ii + " of " + opts.cycles);<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>        for (int i = startRow; i &lt; lastRow; i++) {<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>          if (i % everyN != 0) continue;<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>          long startTime = System.nanoTime();<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>          try (TraceScope scope = TraceUtil.createTrace("test row");){<a name="line.1295"></a>
<span class="sourceLineNo">1296</span>            testRow(i);<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>          }<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>          if ( (i - startRow) &gt; opts.measureAfter) {<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>            // If multiget is enabled, say set to 10, testRow() returns immediately first 9 times<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>            // and sends the actual get request in the 10th iteration. We should only set latency<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>            // when actual request is sent because otherwise it turns out to be 0.<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>            if (opts.multiGet == 0 || (i - startRow + 1) % opts.multiGet == 0) {<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>              latencyHistogram.update((System.nanoTime() - startTime) / 1000);<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>            }<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>            if (status != null &amp;&amp; i &gt; 0 &amp;&amp; (i % getReportingPeriod()) == 0) {<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>              status.setStatus(generateStatus(startRow, i, lastRow));<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>            }<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>          }<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>        }<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>      }<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>    }<a name="line.1311"></a>
<span class="sourceLineNo">1312</span><a name="line.1312"></a>
<span class="sourceLineNo">1313</span>    /**<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>     * @return Subset of the histograms' calculation.<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>     */<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>    public String getShortLatencyReport() {<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>      return YammerHistogramUtils.getShortHistogramReport(this.latencyHistogram);<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>    }<a name="line.1318"></a>
<span class="sourceLineNo">1319</span><a name="line.1319"></a>
<span class="sourceLineNo">1320</span>    /**<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>     * @return Subset of the histograms' calculation.<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>     */<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>    public String getShortValueSizeReport() {<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>      return YammerHistogramUtils.getShortHistogramReport(this.valueSizeHistogram);<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>    }<a name="line.1325"></a>
<span class="sourceLineNo">1326</span><a name="line.1326"></a>
<span class="sourceLineNo">1327</span>    /*<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>    * Test for individual row.<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>    * @param i Row index.<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>    */<a name="line.1330"></a>
<span class="sourceLineNo">1331</span>    abstract void testRow(final int i) throws IOException, InterruptedException;<a name="line.1331"></a>
<span class="sourceLineNo">1332</span>  }<a name="line.1332"></a>
<span class="sourceLineNo">1333</span><a name="line.1333"></a>
<span class="sourceLineNo">1334</span>  static abstract class Test extends TestBase {<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>    protected Connection connection;<a name="line.1335"></a>
<span class="sourceLineNo">1336</span><a name="line.1336"></a>
<span class="sourceLineNo">1337</span>    Test(final Connection con, final TestOptions options, final Status status) {<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>      super(con == null ? HBaseConfiguration.create() : con.getConfiguration(), options, status);<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>      this.connection = con;<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>    }<a name="line.1340"></a>
<span class="sourceLineNo">1341</span><a name="line.1341"></a>
<span class="sourceLineNo">1342</span>    @Override<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>    void createConnection() throws IOException {<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>      if (!opts.isOneCon()) {<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>        this.connection = ConnectionFactory.createConnection(conf);<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>      }<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>    }<a name="line.1347"></a>
<span class="sourceLineNo">1348</span><a name="line.1348"></a>
<span class="sourceLineNo">1349</span>    @Override<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>    void closeConnection() throws IOException {<a name="line.1350"></a>
<span class="sourceLineNo">1351</span>      if (!opts.isOneCon()) {<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>        this.connection.close();<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>      }<a name="line.1353"></a>
<span class="sourceLineNo">1354</span>    }<a name="line.1354"></a>
<span class="sourceLineNo">1355</span>  }<a name="line.1355"></a>
<span class="sourceLineNo">1356</span><a name="line.1356"></a>
<span class="sourceLineNo">1357</span>  static abstract class AsyncTest extends TestBase {<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>    protected AsyncConnection connection;<a name="line.1358"></a>
<span class="sourceLineNo">1359</span><a name="line.1359"></a>
<span class="sourceLineNo">1360</span>    AsyncTest(final AsyncConnection con, final TestOptions options, final Status status) {<a name="line.1360"></a>
<span class="sourceLineNo">1361</span>      super(con == null ? HBaseConfiguration.create() : con.getConfiguration(), options, status);<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>      this.connection = con;<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>    }<a name="line.1363"></a>
<span class="sourceLineNo">1364</span><a name="line.1364"></a>
<span class="sourceLineNo">1365</span>    @Override<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>    void createConnection() {<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>      if (!opts.isOneCon()) {<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>        try {<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>          this.connection = ConnectionFactory.createAsyncConnection(conf).get();<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>        } catch (InterruptedException | ExecutionException e) {<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>          LOG.error("Failed to create async connection", e);<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>        }<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>      }<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>    }<a name="line.1374"></a>
<span class="sourceLineNo">1375</span><a name="line.1375"></a>
<span class="sourceLineNo">1376</span>    @Override<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>    void closeConnection() throws IOException {<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>      if (!opts.isOneCon()) {<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>        this.connection.close();<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>      }<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>    }<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>  }<a name="line.1382"></a>
<span class="sourceLineNo">1383</span><a name="line.1383"></a>
<span class="sourceLineNo">1384</span>  static abstract class TableTest extends Test {<a name="line.1384"></a>
<span class="sourceLineNo">1385</span>    protected Table table;<a name="line.1385"></a>
<span class="sourceLineNo">1386</span><a name="line.1386"></a>
<span class="sourceLineNo">1387</span>    TableTest(Connection con, TestOptions options, Status status) {<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>      super(con, options, status);<a name="line.1388"></a>
<span class="sourceLineNo">1389</span>    }<a name="line.1389"></a>
<span class="sourceLineNo">1390</span><a name="line.1390"></a>
<span class="sourceLineNo">1391</span>    @Override<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>    void onStartup() throws IOException {<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>      this.table = connection.getTable(TableName.valueOf(opts.tableName));<a name="line.1393"></a>
<span class="sourceLineNo">1394</span>    }<a name="line.1394"></a>
<span class="sourceLineNo">1395</span><a name="line.1395"></a>
<span class="sourceLineNo">1396</span>    @Override<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>    void onTakedown() throws IOException {<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>      table.close();<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>    }<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>  }<a name="line.1400"></a>
<span class="sourceLineNo">1401</span><a name="line.1401"></a>
<span class="sourceLineNo">1402</span>  static abstract class AsyncTableTest extends AsyncTest {<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>    protected AsyncTable&lt;?&gt; table;<a name="line.1403"></a>
<span class="sourceLineNo">1404</span><a name="line.1404"></a>
<span class="sourceLineNo">1405</span>    AsyncTableTest(AsyncConnection con, TestOptions options, Status status) {<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>      super(con, options, status);<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>    }<a name="line.1407"></a>
<span class="sourceLineNo">1408</span><a name="line.1408"></a>
<span class="sourceLineNo">1409</span>    @Override<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>    void onStartup() throws IOException {<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>      this.table = connection.getTable(TableName.valueOf(opts.tableName));<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>    }<a name="line.1412"></a>
<span class="sourceLineNo">1413</span><a name="line.1413"></a>
<span class="sourceLineNo">1414</span>    @Override<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>    void onTakedown() throws IOException {<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>    }<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>  }<a name="line.1417"></a>
<span class="sourceLineNo">1418</span><a name="line.1418"></a>
<span class="sourceLineNo">1419</span>  static class AsyncRandomReadTest extends AsyncTableTest {<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>    private final Consistency consistency;<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>    private ArrayList&lt;Get&gt; gets;<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>    private Random rd = new Random();<a name="line.1422"></a>
<span class="sourceLineNo">1423</span><a name="line.1423"></a>
<span class="sourceLineNo">1424</span>    AsyncRandomReadTest(AsyncConnection con, TestOptions options, Status status) {<a name="line.1424"></a>
<span class="sourceLineNo">1425</span>      super(con, options, status);<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>      consistency = options.replicas == DEFAULT_OPTS.replicas ? null : Consistency.TIMELINE;<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>      if (opts.multiGet &gt; 0) {<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>        LOG.info("MultiGet enabled. Sending GETs in batches of " + opts.multiGet + ".");<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>        this.gets = new ArrayList&lt;&gt;(opts.multiGet);<a name="line.1429"></a>
<span class="sourceLineNo">1430</span>      }<a name="line.1430"></a>
<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
<span class="sourceLineNo">1432</span><a name="line.1432"></a>
<span class="sourceLineNo">1433</span>    @Override<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>    void testRow(final int i) throws IOException, InterruptedException {<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>      if (opts.randomSleep &gt; 0) {<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>        Thread.sleep(rd.nextInt(opts.randomSleep));<a name="line.1436"></a>
<span class="sourceLineNo">1437</span>      }<a name="line.1437"></a>
<span class="sourceLineNo">1438</span>      Get get = new Get(getRandomRow(this.rand, opts.totalRows));<a name="line.1438"></a>
<span class="sourceLineNo">1439</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1439"></a>
<span class="sourceLineNo">1440</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>        if (opts.addColumns) {<a name="line.1441"></a>
<span class="sourceLineNo">1442</span>          for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1442"></a>
<span class="sourceLineNo">1443</span>            byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>            get.addColumn(familyName, qualifier);<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>          }<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>        } else {<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>          get.addFamily(familyName);<a name="line.1447"></a>
<span class="sourceLineNo">1448</span>        }<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>      }<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>      if (opts.filterAll) {<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>        get.setFilter(new FilterAllFilter());<a name="line.1451"></a>
<span class="sourceLineNo">1452</span>      }<a name="line.1452"></a>
<span class="sourceLineNo">1453</span>      get.setConsistency(consistency);<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>      if (LOG.isTraceEnabled()) LOG.trace(get.toString());<a name="line.1454"></a>
<span class="sourceLineNo">1455</span>      try {<a name="line.1455"></a>
<span class="sourceLineNo">1456</span>        if (opts.multiGet &gt; 0) {<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>          this.gets.add(get);<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>          if (this.gets.size() == opts.multiGet) {<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>            Result[] rs =<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>                this.table.get(this.gets).stream().map(f -&gt; propagate(f::get)).toArray(Result[]::new);<a name="line.1460"></a>
<span class="sourceLineNo">1461</span>            updateValueSize(rs);<a name="line.1461"></a>
<span class="sourceLineNo">1462</span>            this.gets.clear();<a name="line.1462"></a>
<span class="sourceLineNo">1463</span>          }<a name="line.1463"></a>
<span class="sourceLineNo">1464</span>        } else {<a name="line.1464"></a>
<span class="sourceLineNo">1465</span>          updateValueSize(this.table.get(get).get());<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>        }<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>      } catch (ExecutionException e) {<a name="line.1467"></a>
<span class="sourceLineNo">1468</span>        throw new IOException(e);<a name="line.1468"></a>
<span class="sourceLineNo">1469</span>      }<a name="line.1469"></a>
<span class="sourceLineNo">1470</span>    }<a name="line.1470"></a>
<span class="sourceLineNo">1471</span><a name="line.1471"></a>
<span class="sourceLineNo">1472</span>    public static RuntimeException runtime(Throwable e) {<a name="line.1472"></a>
<span class="sourceLineNo">1473</span>      if (e instanceof RuntimeException) {<a name="line.1473"></a>
<span class="sourceLineNo">1474</span>        return (RuntimeException) e;<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>      }<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>      return new RuntimeException(e);<a name="line.1476"></a>
<span class="sourceLineNo">1477</span>    }<a name="line.1477"></a>
<span class="sourceLineNo">1478</span><a name="line.1478"></a>
<span class="sourceLineNo">1479</span>    public static &lt;V&gt; V propagate(Callable&lt;V&gt; callable) {<a name="line.1479"></a>
<span class="sourceLineNo">1480</span>      try {<a name="line.1480"></a>
<span class="sourceLineNo">1481</span>        return callable.call();<a name="line.1481"></a>
<span class="sourceLineNo">1482</span>      } catch (Exception e) {<a name="line.1482"></a>
<span class="sourceLineNo">1483</span>        throw runtime(e);<a name="line.1483"></a>
<span class="sourceLineNo">1484</span>      }<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>    }<a name="line.1485"></a>
<span class="sourceLineNo">1486</span><a name="line.1486"></a>
<span class="sourceLineNo">1487</span>    @Override<a name="line.1487"></a>
<span class="sourceLineNo">1488</span>    protected int getReportingPeriod() {<a name="line.1488"></a>
<span class="sourceLineNo">1489</span>      int period = opts.perClientRunRows / 10;<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>      return period == 0 ? opts.perClientRunRows : period;<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>    }<a name="line.1491"></a>
<span class="sourceLineNo">1492</span><a name="line.1492"></a>
<span class="sourceLineNo">1493</span>    @Override<a name="line.1493"></a>
<span class="sourceLineNo">1494</span>    protected void testTakedown() throws IOException {<a name="line.1494"></a>
<span class="sourceLineNo">1495</span>      if (this.gets != null &amp;&amp; this.gets.size() &gt; 0) {<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>        this.table.get(gets);<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>        this.gets.clear();<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>      }<a name="line.1498"></a>
<span class="sourceLineNo">1499</span>      super.testTakedown();<a name="line.1499"></a>
<span class="sourceLineNo">1500</span>    }<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>  }<a name="line.1501"></a>
<span class="sourceLineNo">1502</span><a name="line.1502"></a>
<span class="sourceLineNo">1503</span>  static class AsyncRandomWriteTest extends AsyncTableTest {<a name="line.1503"></a>
<span class="sourceLineNo">1504</span>    AsyncRandomWriteTest(AsyncConnection con, TestOptions options, Status status) {<a name="line.1504"></a>
<span class="sourceLineNo">1505</span>      super(con, options, status);<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>    }<a name="line.1506"></a>
<span class="sourceLineNo">1507</span><a name="line.1507"></a>
<span class="sourceLineNo">1508</span>    @Override<a name="line.1508"></a>
<span class="sourceLineNo">1509</span>    void testRow(final int i) throws IOException, InterruptedException {<a name="line.1509"></a>
<span class="sourceLineNo">1510</span>      byte[] row = getRandomRow(this.rand, opts.totalRows);<a name="line.1510"></a>
<span class="sourceLineNo">1511</span>      Put put = new Put(row);<a name="line.1511"></a>
<span class="sourceLineNo">1512</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1512"></a>
<span class="sourceLineNo">1513</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1513"></a>
<span class="sourceLineNo">1514</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>          byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.1515"></a>
<span class="sourceLineNo">1516</span>          byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.1516"></a>
<span class="sourceLineNo">1517</span>          if (opts.useTags) {<a name="line.1517"></a>
<span class="sourceLineNo">1518</span>            byte[] tag = generateData(this.rand, TAG_LENGTH);<a name="line.1518"></a>
<span class="sourceLineNo">1519</span>            Tag[] tags = new Tag[opts.noOfTags];<a name="line.1519"></a>
<span class="sourceLineNo">1520</span>            for (int n = 0; n &lt; opts.noOfTags; n++) {<a name="line.1520"></a>
<span class="sourceLineNo">1521</span>              Tag t = new ArrayBackedTag((byte) n, tag);<a name="line.1521"></a>
<span class="sourceLineNo">1522</span>              tags[n] = t;<a name="line.1522"></a>
<span class="sourceLineNo">1523</span>            }<a name="line.1523"></a>
<span class="sourceLineNo">1524</span>            KeyValue kv =<a name="line.1524"></a>
<span class="sourceLineNo">1525</span>              new KeyValue(row, familyName, qualifier, HConstants.LATEST_TIMESTAMP, value, tags);<a name="line.1525"></a>
<span class="sourceLineNo">1526</span>            put.add(kv);<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>            updateValueSize(kv.getValueLength());<a name="line.1527"></a>
<span class="sourceLineNo">1528</span>          } else {<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>            put.addColumn(familyName, qualifier, value);<a name="line.1529"></a>
<span class="sourceLineNo">1530</span>            updateValueSize(value.length);<a name="line.1530"></a>
<span class="sourceLineNo">1531</span>          }<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>        }<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>      }<a name="line.1533"></a>
<span class="sourceLineNo">1534</span>      put.setDurability(opts.writeToWAL ? Durability.SYNC_WAL : Durability.SKIP_WAL);<a name="line.1534"></a>
<span class="sourceLineNo">1535</span>      try {<a name="line.1535"></a>
<span class="sourceLineNo">1536</span>        table.put(put).get();<a name="line.1536"></a>
<span class="sourceLineNo">1537</span>      } catch (ExecutionException e) {<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>        throw new IOException(e);<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>      }<a name="line.1539"></a>
<span class="sourceLineNo">1540</span>    }<a name="line.1540"></a>
<span class="sourceLineNo">1541</span>  }<a name="line.1541"></a>
<span class="sourceLineNo">1542</span><a name="line.1542"></a>
<span class="sourceLineNo">1543</span>  static class AsyncScanTest extends AsyncTableTest {<a name="line.1543"></a>
<span class="sourceLineNo">1544</span>    private ResultScanner testScanner;<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>    private AsyncTable&lt;?&gt; asyncTable;<a name="line.1545"></a>
<span class="sourceLineNo">1546</span><a name="line.1546"></a>
<span class="sourceLineNo">1547</span>    AsyncScanTest(AsyncConnection con, TestOptions options, Status status) {<a name="line.1547"></a>
<span class="sourceLineNo">1548</span>      super(con, options, status);<a name="line.1548"></a>
<span class="sourceLineNo">1549</span>    }<a name="line.1549"></a>
<span class="sourceLineNo">1550</span><a name="line.1550"></a>
<span class="sourceLineNo">1551</span>    @Override<a name="line.1551"></a>
<span class="sourceLineNo">1552</span>    void onStartup() throws IOException {<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>      this.asyncTable =<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>          connection.getTable(TableName.valueOf(opts.tableName),<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>            Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()));<a name="line.1555"></a>
<span class="sourceLineNo">1556</span>    }<a name="line.1556"></a>
<span class="sourceLineNo">1557</span><a name="line.1557"></a>
<span class="sourceLineNo">1558</span>    @Override<a name="line.1558"></a>
<span class="sourceLineNo">1559</span>    void testTakedown() throws IOException {<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>      if (this.testScanner != null) {<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>        updateScanMetrics(this.testScanner.getScanMetrics());<a name="line.1561"></a>
<span class="sourceLineNo">1562</span>        this.testScanner.close();<a name="line.1562"></a>
<span class="sourceLineNo">1563</span>      }<a name="line.1563"></a>
<span class="sourceLineNo">1564</span>      super.testTakedown();<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>    }<a name="line.1565"></a>
<span class="sourceLineNo">1566</span><a name="line.1566"></a>
<span class="sourceLineNo">1567</span>    @Override<a name="line.1567"></a>
<span class="sourceLineNo">1568</span>    void testRow(final int i) throws IOException {<a name="line.1568"></a>
<span class="sourceLineNo">1569</span>      if (this.testScanner == null) {<a name="line.1569"></a>
<span class="sourceLineNo">1570</span>        Scan scan =<a name="line.1570"></a>
<span class="sourceLineNo">1571</span>            new Scan().withStartRow(format(opts.startRow)).setCaching(opts.caching)<a name="line.1571"></a>
<span class="sourceLineNo">1572</span>                .setCacheBlocks(opts.cacheBlocks).setAsyncPrefetch(opts.asyncPrefetch)<a name="line.1572"></a>
<span class="sourceLineNo">1573</span>                .setReadType(opts.scanReadType).setScanMetricsEnabled(true);<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>        for (int family = 0; family &lt; opts.families; family++) {<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>          byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1575"></a>
<span class="sourceLineNo">1576</span>          if (opts.addColumns) {<a name="line.1576"></a>
<span class="sourceLineNo">1577</span>            for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>              byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>              scan.addColumn(familyName, qualifier);<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>            }<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>          } else {<a name="line.1581"></a>
<span class="sourceLineNo">1582</span>            scan.addFamily(familyName);<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>          }<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>        }<a name="line.1584"></a>
<span class="sourceLineNo">1585</span>        if (opts.filterAll) {<a name="line.1585"></a>
<span class="sourceLineNo">1586</span>          scan.setFilter(new FilterAllFilter());<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>        }<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>        this.testScanner = asyncTable.getScanner(scan);<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>      }<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>      Result r = testScanner.next();<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>      updateValueSize(r);<a name="line.1591"></a>
<span class="sourceLineNo">1592</span>    }<a name="line.1592"></a>
<span class="sourceLineNo">1593</span>  }<a name="line.1593"></a>
<span class="sourceLineNo">1594</span><a name="line.1594"></a>
<span class="sourceLineNo">1595</span>  static class AsyncSequentialReadTest extends AsyncTableTest {<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>    AsyncSequentialReadTest(AsyncConnection con, TestOptions options, Status status) {<a name="line.1596"></a>
<span class="sourceLineNo">1597</span>      super(con, options, status);<a name="line.1597"></a>
<span class="sourceLineNo">1598</span>    }<a name="line.1598"></a>
<span class="sourceLineNo">1599</span><a name="line.1599"></a>
<span class="sourceLineNo">1600</span>    @Override<a name="line.1600"></a>
<span class="sourceLineNo">1601</span>    void testRow(final int i) throws IOException, InterruptedException {<a name="line.1601"></a>
<span class="sourceLineNo">1602</span>      Get get = new Get(format(i));<a name="line.1602"></a>
<span class="sourceLineNo">1603</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1603"></a>
<span class="sourceLineNo">1604</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1604"></a>
<span class="sourceLineNo">1605</span>        if (opts.addColumns) {<a name="line.1605"></a>
<span class="sourceLineNo">1606</span>          for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1606"></a>
<span class="sourceLineNo">1607</span>            byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.1607"></a>
<span class="sourceLineNo">1608</span>            get.addColumn(familyName, qualifier);<a name="line.1608"></a>
<span class="sourceLineNo">1609</span>          }<a name="line.1609"></a>
<span class="sourceLineNo">1610</span>        } else {<a name="line.1610"></a>
<span class="sourceLineNo">1611</span>          get.addFamily(familyName);<a name="line.1611"></a>
<span class="sourceLineNo">1612</span>        }<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>      if (opts.filterAll) {<a name="line.1614"></a>
<span class="sourceLineNo">1615</span>        get.setFilter(new FilterAllFilter());<a name="line.1615"></a>
<span class="sourceLineNo">1616</span>      }<a name="line.1616"></a>
<span class="sourceLineNo">1617</span>      try {<a name="line.1617"></a>
<span class="sourceLineNo">1618</span>        updateValueSize(table.get(get).get());<a name="line.1618"></a>
<span class="sourceLineNo">1619</span>      } catch (ExecutionException e) {<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>        throw new IOException(e);<a name="line.1620"></a>
<span class="sourceLineNo">1621</span>      }<a name="line.1621"></a>
<span class="sourceLineNo">1622</span>    }<a name="line.1622"></a>
<span class="sourceLineNo">1623</span>  }<a name="line.1623"></a>
<span class="sourceLineNo">1624</span><a name="line.1624"></a>
<span class="sourceLineNo">1625</span>  static class AsyncSequentialWriteTest extends AsyncTableTest {<a name="line.1625"></a>
<span class="sourceLineNo">1626</span>    AsyncSequentialWriteTest(AsyncConnection con, TestOptions options, Status status) {<a name="line.1626"></a>
<span class="sourceLineNo">1627</span>      super(con, options, status);<a name="line.1627"></a>
<span class="sourceLineNo">1628</span>    }<a name="line.1628"></a>
<span class="sourceLineNo">1629</span><a name="line.1629"></a>
<span class="sourceLineNo">1630</span>    @Override<a name="line.1630"></a>
<span class="sourceLineNo">1631</span>    void testRow(final int i) throws IOException, InterruptedException {<a name="line.1631"></a>
<span class="sourceLineNo">1632</span>      byte[] row = format(i);<a name="line.1632"></a>
<span class="sourceLineNo">1633</span>      Put put = new Put(row);<a name="line.1633"></a>
<span class="sourceLineNo">1634</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1634"></a>
<span class="sourceLineNo">1635</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1635"></a>
<span class="sourceLineNo">1636</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1636"></a>
<span class="sourceLineNo">1637</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>          byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>          if (opts.useTags) {<a name="line.1639"></a>
<span class="sourceLineNo">1640</span>            byte[] tag = generateData(this.rand, TAG_LENGTH);<a name="line.1640"></a>
<span class="sourceLineNo">1641</span>            Tag[] tags = new Tag[opts.noOfTags];<a name="line.1641"></a>
<span class="sourceLineNo">1642</span>            for (int n = 0; n &lt; opts.noOfTags; n++) {<a name="line.1642"></a>
<span class="sourceLineNo">1643</span>              Tag t = new ArrayBackedTag((byte) n, tag);<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>              tags[n] = t;<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>            }<a name="line.1645"></a>
<span class="sourceLineNo">1646</span>            KeyValue kv = new KeyValue(row, familyName, qualifier, HConstants.LATEST_TIMESTAMP,<a name="line.1646"></a>
<span class="sourceLineNo">1647</span>              value, tags);<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>            put.add(kv);<a name="line.1648"></a>
<span class="sourceLineNo">1649</span>            updateValueSize(kv.getValueLength());<a name="line.1649"></a>
<span class="sourceLineNo">1650</span>          } else {<a name="line.1650"></a>
<span class="sourceLineNo">1651</span>            put.addColumn(familyName, qualifier, value);<a name="line.1651"></a>
<span class="sourceLineNo">1652</span>            updateValueSize(value.length);<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>          }<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>        }<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>      }<a name="line.1655"></a>
<span class="sourceLineNo">1656</span>      put.setDurability(opts.writeToWAL ? Durability.SYNC_WAL : Durability.SKIP_WAL);<a name="line.1656"></a>
<span class="sourceLineNo">1657</span>      try {<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>        table.put(put).get();<a name="line.1658"></a>
<span class="sourceLineNo">1659</span>      } catch (ExecutionException e) {<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>        throw new IOException(e);<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>      }<a name="line.1661"></a>
<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
<span class="sourceLineNo">1663</span>  }<a name="line.1663"></a>
<span class="sourceLineNo">1664</span><a name="line.1664"></a>
<span class="sourceLineNo">1665</span>  static abstract class BufferedMutatorTest extends Test {<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>    protected BufferedMutator mutator;<a name="line.1666"></a>
<span class="sourceLineNo">1667</span>    protected Table table;<a name="line.1667"></a>
<span class="sourceLineNo">1668</span><a name="line.1668"></a>
<span class="sourceLineNo">1669</span>    BufferedMutatorTest(Connection con, TestOptions options, Status status) {<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>      super(con, options, status);<a name="line.1670"></a>
<span class="sourceLineNo">1671</span>    }<a name="line.1671"></a>
<span class="sourceLineNo">1672</span><a name="line.1672"></a>
<span class="sourceLineNo">1673</span>    @Override<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>    void onStartup() throws IOException {<a name="line.1674"></a>
<span class="sourceLineNo">1675</span>      BufferedMutatorParams p = new BufferedMutatorParams(TableName.valueOf(opts.tableName));<a name="line.1675"></a>
<span class="sourceLineNo">1676</span>      p.writeBufferSize(opts.bufferSize);<a name="line.1676"></a>
<span class="sourceLineNo">1677</span>      this.mutator = connection.getBufferedMutator(p);<a name="line.1677"></a>
<span class="sourceLineNo">1678</span>      this.table = connection.getTable(TableName.valueOf(opts.tableName));<a name="line.1678"></a>
<span class="sourceLineNo">1679</span>    }<a name="line.1679"></a>
<span class="sourceLineNo">1680</span><a name="line.1680"></a>
<span class="sourceLineNo">1681</span>    @Override<a name="line.1681"></a>
<span class="sourceLineNo">1682</span>    void onTakedown() throws IOException {<a name="line.1682"></a>
<span class="sourceLineNo">1683</span>      mutator.close();<a name="line.1683"></a>
<span class="sourceLineNo">1684</span>      table.close();<a name="line.1684"></a>
<span class="sourceLineNo">1685</span>    }<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>  }<a name="line.1686"></a>
<span class="sourceLineNo">1687</span><a name="line.1687"></a>
<span class="sourceLineNo">1688</span>  static class RandomSeekScanTest extends TableTest {<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>    RandomSeekScanTest(Connection con, TestOptions options, Status status) {<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>      super(con, options, status);<a name="line.1690"></a>
<span class="sourceLineNo">1691</span>    }<a name="line.1691"></a>
<span class="sourceLineNo">1692</span><a name="line.1692"></a>
<span class="sourceLineNo">1693</span>    @Override<a name="line.1693"></a>
<span class="sourceLineNo">1694</span>    void testRow(final int i) throws IOException {<a name="line.1694"></a>
<span class="sourceLineNo">1695</span>      Scan scan = new Scan().withStartRow(getRandomRow(this.rand, opts.totalRows))<a name="line.1695"></a>
<span class="sourceLineNo">1696</span>          .setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.1696"></a>
<span class="sourceLineNo">1697</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>          .setScanMetricsEnabled(true);<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>      FilterList list = new FilterList();<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1701"></a>
<span class="sourceLineNo">1702</span>        if (opts.addColumns) {<a name="line.1702"></a>
<span class="sourceLineNo">1703</span>          for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1703"></a>
<span class="sourceLineNo">1704</span>            byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.1704"></a>
<span class="sourceLineNo">1705</span>            scan.addColumn(familyName, qualifier);<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>          }<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>        } else {<a name="line.1707"></a>
<span class="sourceLineNo">1708</span>          scan.addFamily(familyName);<a name="line.1708"></a>
<span class="sourceLineNo">1709</span>        }<a name="line.1709"></a>
<span class="sourceLineNo">1710</span>      }<a name="line.1710"></a>
<span class="sourceLineNo">1711</span>      if (opts.filterAll) {<a name="line.1711"></a>
<span class="sourceLineNo">1712</span>        list.addFilter(new FilterAllFilter());<a name="line.1712"></a>
<span class="sourceLineNo">1713</span>      }<a name="line.1713"></a>
<span class="sourceLineNo">1714</span>      list.addFilter(new WhileMatchFilter(new PageFilter(120)));<a name="line.1714"></a>
<span class="sourceLineNo">1715</span>      scan.setFilter(list);<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>      ResultScanner s = this.table.getScanner(scan);<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>      try {<a name="line.1717"></a>
<span class="sourceLineNo">1718</span>        for (Result rr; (rr = s.next()) != null;) {<a name="line.1718"></a>
<span class="sourceLineNo">1719</span>          updateValueSize(rr);<a name="line.1719"></a>
<span class="sourceLineNo">1720</span>        }<a name="line.1720"></a>
<span class="sourceLineNo">1721</span>      } finally {<a name="line.1721"></a>
<span class="sourceLineNo">1722</span>        updateScanMetrics(s.getScanMetrics());<a name="line.1722"></a>
<span class="sourceLineNo">1723</span>        s.close();<a name="line.1723"></a>
<span class="sourceLineNo">1724</span>      }<a name="line.1724"></a>
<span class="sourceLineNo">1725</span>    }<a name="line.1725"></a>
<span class="sourceLineNo">1726</span><a name="line.1726"></a>
<span class="sourceLineNo">1727</span>    @Override<a name="line.1727"></a>
<span class="sourceLineNo">1728</span>    protected int getReportingPeriod() {<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>      int period = opts.perClientRunRows / 100;<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>      return period == 0 ? opts.perClientRunRows : period;<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>    }<a name="line.1731"></a>
<span class="sourceLineNo">1732</span><a name="line.1732"></a>
<span class="sourceLineNo">1733</span>  }<a name="line.1733"></a>
<span class="sourceLineNo">1734</span><a name="line.1734"></a>
<span class="sourceLineNo">1735</span>  static abstract class RandomScanWithRangeTest extends TableTest {<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>    RandomScanWithRangeTest(Connection con, TestOptions options, Status status) {<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>      super(con, options, status);<a name="line.1737"></a>
<span class="sourceLineNo">1738</span>    }<a name="line.1738"></a>
<span class="sourceLineNo">1739</span><a name="line.1739"></a>
<span class="sourceLineNo">1740</span>    @Override<a name="line.1740"></a>
<span class="sourceLineNo">1741</span>    void testRow(final int i) throws IOException {<a name="line.1741"></a>
<span class="sourceLineNo">1742</span>      Pair&lt;byte[], byte[]&gt; startAndStopRow = getStartAndStopRow();<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>      Scan scan = new Scan().withStartRow(startAndStopRow.getFirst())<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>          .withStopRow(startAndStopRow.getSecond()).setCaching(opts.caching)<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>          .setCacheBlocks(opts.cacheBlocks).setAsyncPrefetch(opts.asyncPrefetch)<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>          .setReadType(opts.scanReadType).setScanMetricsEnabled(true);<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1747"></a>
<span class="sourceLineNo">1748</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>        if (opts.addColumns) {<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>          for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1750"></a>
<span class="sourceLineNo">1751</span>            byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.1751"></a>
<span class="sourceLineNo">1752</span>            scan.addColumn(familyName, qualifier);<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>          }<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>        } else {<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>          scan.addFamily(familyName);<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>        }<a name="line.1756"></a>
<span class="sourceLineNo">1757</span>      }<a name="line.1757"></a>
<span class="sourceLineNo">1758</span>      if (opts.filterAll) {<a name="line.1758"></a>
<span class="sourceLineNo">1759</span>        scan.setFilter(new FilterAllFilter());<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>      }<a name="line.1760"></a>
<span class="sourceLineNo">1761</span>      Result r = null;<a name="line.1761"></a>
<span class="sourceLineNo">1762</span>      int count = 0;<a name="line.1762"></a>
<span class="sourceLineNo">1763</span>      ResultScanner s = this.table.getScanner(scan);<a name="line.1763"></a>
<span class="sourceLineNo">1764</span>      try {<a name="line.1764"></a>
<span class="sourceLineNo">1765</span>        for (; (r = s.next()) != null;) {<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>          updateValueSize(r);<a name="line.1766"></a>
<span class="sourceLineNo">1767</span>          count++;<a name="line.1767"></a>
<span class="sourceLineNo">1768</span>        }<a name="line.1768"></a>
<span class="sourceLineNo">1769</span>        if (i % 100 == 0) {<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>          LOG.info(String.format("Scan for key range %s - %s returned %s rows",<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>            Bytes.toString(startAndStopRow.getFirst()),<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>            Bytes.toString(startAndStopRow.getSecond()), count));<a name="line.1772"></a>
<span class="sourceLineNo">1773</span>        }<a name="line.1773"></a>
<span class="sourceLineNo">1774</span>      } finally {<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>        updateScanMetrics(s.getScanMetrics());<a name="line.1775"></a>
<span class="sourceLineNo">1776</span>        s.close();<a name="line.1776"></a>
<span class="sourceLineNo">1777</span>      }<a name="line.1777"></a>
<span class="sourceLineNo">1778</span>    }<a name="line.1778"></a>
<span class="sourceLineNo">1779</span><a name="line.1779"></a>
<span class="sourceLineNo">1780</span>    protected abstract Pair&lt;byte[],byte[]&gt; getStartAndStopRow();<a name="line.1780"></a>
<span class="sourceLineNo">1781</span><a name="line.1781"></a>
<span class="sourceLineNo">1782</span>    protected Pair&lt;byte[], byte[]&gt; generateStartAndStopRows(int maxRange) {<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>      int start = this.rand.nextInt(Integer.MAX_VALUE) % opts.totalRows;<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>      int stop = start + maxRange;<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>      return new Pair&lt;&gt;(format(start), format(stop));<a name="line.1785"></a>
<span class="sourceLineNo">1786</span>    }<a name="line.1786"></a>
<span class="sourceLineNo">1787</span><a name="line.1787"></a>
<span class="sourceLineNo">1788</span>    @Override<a name="line.1788"></a>
<span class="sourceLineNo">1789</span>    protected int getReportingPeriod() {<a name="line.1789"></a>
<span class="sourceLineNo">1790</span>      int period = opts.perClientRunRows / 100;<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>      return period == 0? opts.perClientRunRows: period;<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>    }<a name="line.1792"></a>
<span class="sourceLineNo">1793</span>  }<a name="line.1793"></a>
<span class="sourceLineNo">1794</span><a name="line.1794"></a>
<span class="sourceLineNo">1795</span>  static class RandomScanWithRange10Test extends RandomScanWithRangeTest {<a name="line.1795"></a>
<span class="sourceLineNo">1796</span>    RandomScanWithRange10Test(Connection con, TestOptions options, Status status) {<a name="line.1796"></a>
<span class="sourceLineNo">1797</span>      super(con, options, status);<a name="line.1797"></a>
<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
<span class="sourceLineNo">1799</span><a name="line.1799"></a>
<span class="sourceLineNo">1800</span>    @Override<a name="line.1800"></a>
<span class="sourceLineNo">1801</span>    protected Pair&lt;byte[], byte[]&gt; getStartAndStopRow() {<a name="line.1801"></a>
<span class="sourceLineNo">1802</span>      return generateStartAndStopRows(10);<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>    }<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>  }<a name="line.1804"></a>
<span class="sourceLineNo">1805</span><a name="line.1805"></a>
<span class="sourceLineNo">1806</span>  static class RandomScanWithRange100Test extends RandomScanWithRangeTest {<a name="line.1806"></a>
<span class="sourceLineNo">1807</span>    RandomScanWithRange100Test(Connection con, TestOptions options, Status status) {<a name="line.1807"></a>
<span class="sourceLineNo">1808</span>      super(con, options, status);<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>    }<a name="line.1809"></a>
<span class="sourceLineNo">1810</span><a name="line.1810"></a>
<span class="sourceLineNo">1811</span>    @Override<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>    protected Pair&lt;byte[], byte[]&gt; getStartAndStopRow() {<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>      return generateStartAndStopRows(100);<a name="line.1813"></a>
<span class="sourceLineNo">1814</span>    }<a name="line.1814"></a>
<span class="sourceLineNo">1815</span>  }<a name="line.1815"></a>
<span class="sourceLineNo">1816</span><a name="line.1816"></a>
<span class="sourceLineNo">1817</span>  static class RandomScanWithRange1000Test extends RandomScanWithRangeTest {<a name="line.1817"></a>
<span class="sourceLineNo">1818</span>    RandomScanWithRange1000Test(Connection con, TestOptions options, Status status) {<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>      super(con, options, status);<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>    }<a name="line.1820"></a>
<span class="sourceLineNo">1821</span><a name="line.1821"></a>
<span class="sourceLineNo">1822</span>    @Override<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>    protected Pair&lt;byte[], byte[]&gt; getStartAndStopRow() {<a name="line.1823"></a>
<span class="sourceLineNo">1824</span>      return generateStartAndStopRows(1000);<a name="line.1824"></a>
<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
<span class="sourceLineNo">1826</span>  }<a name="line.1826"></a>
<span class="sourceLineNo">1827</span><a name="line.1827"></a>
<span class="sourceLineNo">1828</span>  static class RandomScanWithRange10000Test extends RandomScanWithRangeTest {<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>    RandomScanWithRange10000Test(Connection con, TestOptions options, Status status) {<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>      super(con, options, status);<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>    }<a name="line.1831"></a>
<span class="sourceLineNo">1832</span><a name="line.1832"></a>
<span class="sourceLineNo">1833</span>    @Override<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>    protected Pair&lt;byte[], byte[]&gt; getStartAndStopRow() {<a name="line.1834"></a>
<span class="sourceLineNo">1835</span>      return generateStartAndStopRows(10000);<a name="line.1835"></a>
<span class="sourceLineNo">1836</span>    }<a name="line.1836"></a>
<span class="sourceLineNo">1837</span>  }<a name="line.1837"></a>
<span class="sourceLineNo">1838</span><a name="line.1838"></a>
<span class="sourceLineNo">1839</span>  static class RandomReadTest extends TableTest {<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>    private final Consistency consistency;<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>    private ArrayList&lt;Get&gt; gets;<a name="line.1841"></a>
<span class="sourceLineNo">1842</span>    private Random rd = new Random();<a name="line.1842"></a>
<span class="sourceLineNo">1843</span><a name="line.1843"></a>
<span class="sourceLineNo">1844</span>    RandomReadTest(Connection con, TestOptions options, Status status) {<a name="line.1844"></a>
<span class="sourceLineNo">1845</span>      super(con, options, status);<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>      consistency = options.replicas == DEFAULT_OPTS.replicas ? null : Consistency.TIMELINE;<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>      if (opts.multiGet &gt; 0) {<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>        LOG.info("MultiGet enabled. Sending GETs in batches of " + opts.multiGet + ".");<a name="line.1848"></a>
<span class="sourceLineNo">1849</span>        this.gets = new ArrayList&lt;&gt;(opts.multiGet);<a name="line.1849"></a>
<span class="sourceLineNo">1850</span>      }<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>    }<a name="line.1851"></a>
<span class="sourceLineNo">1852</span><a name="line.1852"></a>
<span class="sourceLineNo">1853</span>    @Override<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>    void testRow(final int i) throws IOException, InterruptedException {<a name="line.1854"></a>
<span class="sourceLineNo">1855</span>      if (opts.randomSleep &gt; 0) {<a name="line.1855"></a>
<span class="sourceLineNo">1856</span>        Thread.sleep(rd.nextInt(opts.randomSleep));<a name="line.1856"></a>
<span class="sourceLineNo">1857</span>      }<a name="line.1857"></a>
<span class="sourceLineNo">1858</span>      Get get = new Get(getRandomRow(this.rand, opts.totalRows));<a name="line.1858"></a>
<span class="sourceLineNo">1859</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1859"></a>
<span class="sourceLineNo">1860</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>        if (opts.addColumns) {<a name="line.1861"></a>
<span class="sourceLineNo">1862</span>          for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1862"></a>
<span class="sourceLineNo">1863</span>            byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>            get.addColumn(familyName, qualifier);<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>          }<a name="line.1865"></a>
<span class="sourceLineNo">1866</span>        } else {<a name="line.1866"></a>
<span class="sourceLineNo">1867</span>          get.addFamily(familyName);<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>        }<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>      }<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>      if (opts.filterAll) {<a name="line.1870"></a>
<span class="sourceLineNo">1871</span>        get.setFilter(new FilterAllFilter());<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>      }<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>      get.setConsistency(consistency);<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>      if (LOG.isTraceEnabled()) LOG.trace(get.toString());<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>      if (opts.multiGet &gt; 0) {<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>        this.gets.add(get);<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>        if (this.gets.size() == opts.multiGet) {<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>          Result [] rs = this.table.get(this.gets);<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>          updateValueSize(rs);<a name="line.1879"></a>
<span class="sourceLineNo">1880</span>          this.gets.clear();<a name="line.1880"></a>
<span class="sourceLineNo">1881</span>        }<a name="line.1881"></a>
<span class="sourceLineNo">1882</span>      } else {<a name="line.1882"></a>
<span class="sourceLineNo">1883</span>        updateValueSize(this.table.get(get));<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>      }<a name="line.1884"></a>
<span class="sourceLineNo">1885</span>    }<a name="line.1885"></a>
<span class="sourceLineNo">1886</span><a name="line.1886"></a>
<span class="sourceLineNo">1887</span>    @Override<a name="line.1887"></a>
<span class="sourceLineNo">1888</span>    protected int getReportingPeriod() {<a name="line.1888"></a>
<span class="sourceLineNo">1889</span>      int period = opts.perClientRunRows / 10;<a name="line.1889"></a>
<span class="sourceLineNo">1890</span>      return period == 0 ? opts.perClientRunRows : period;<a name="line.1890"></a>
<span class="sourceLineNo">1891</span>    }<a name="line.1891"></a>
<span class="sourceLineNo">1892</span><a name="line.1892"></a>
<span class="sourceLineNo">1893</span>    @Override<a name="line.1893"></a>
<span class="sourceLineNo">1894</span>    protected void testTakedown() throws IOException {<a name="line.1894"></a>
<span class="sourceLineNo">1895</span>      if (this.gets != null &amp;&amp; this.gets.size() &gt; 0) {<a name="line.1895"></a>
<span class="sourceLineNo">1896</span>        this.table.get(gets);<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>        this.gets.clear();<a name="line.1897"></a>
<span class="sourceLineNo">1898</span>      }<a name="line.1898"></a>
<span class="sourceLineNo">1899</span>      super.testTakedown();<a name="line.1899"></a>
<span class="sourceLineNo">1900</span>    }<a name="line.1900"></a>
<span class="sourceLineNo">1901</span>  }<a name="line.1901"></a>
<span class="sourceLineNo">1902</span><a name="line.1902"></a>
<span class="sourceLineNo">1903</span>  static class RandomWriteTest extends BufferedMutatorTest {<a name="line.1903"></a>
<span class="sourceLineNo">1904</span>    RandomWriteTest(Connection con, TestOptions options, Status status) {<a name="line.1904"></a>
<span class="sourceLineNo">1905</span>      super(con, options, status);<a name="line.1905"></a>
<span class="sourceLineNo">1906</span>    }<a name="line.1906"></a>
<span class="sourceLineNo">1907</span><a name="line.1907"></a>
<span class="sourceLineNo">1908</span>    @Override<a name="line.1908"></a>
<span class="sourceLineNo">1909</span>    void testRow(final int i) throws IOException {<a name="line.1909"></a>
<span class="sourceLineNo">1910</span>      byte[] row = getRandomRow(this.rand, opts.totalRows);<a name="line.1910"></a>
<span class="sourceLineNo">1911</span>      Put put = new Put(row);<a name="line.1911"></a>
<span class="sourceLineNo">1912</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1912"></a>
<span class="sourceLineNo">1913</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1913"></a>
<span class="sourceLineNo">1914</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1914"></a>
<span class="sourceLineNo">1915</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.1915"></a>
<span class="sourceLineNo">1916</span>          byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.1916"></a>
<span class="sourceLineNo">1917</span>          if (opts.useTags) {<a name="line.1917"></a>
<span class="sourceLineNo">1918</span>            byte[] tag = generateData(this.rand, TAG_LENGTH);<a name="line.1918"></a>
<span class="sourceLineNo">1919</span>            Tag[] tags = new Tag[opts.noOfTags];<a name="line.1919"></a>
<span class="sourceLineNo">1920</span>            for (int n = 0; n &lt; opts.noOfTags; n++) {<a name="line.1920"></a>
<span class="sourceLineNo">1921</span>              Tag t = new ArrayBackedTag((byte) n, tag);<a name="line.1921"></a>
<span class="sourceLineNo">1922</span>              tags[n] = t;<a name="line.1922"></a>
<span class="sourceLineNo">1923</span>            }<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>            KeyValue kv = new KeyValue(row, familyName, qualifier, HConstants.LATEST_TIMESTAMP,<a name="line.1924"></a>
<span class="sourceLineNo">1925</span>              value, tags);<a name="line.1925"></a>
<span class="sourceLineNo">1926</span>            put.add(kv);<a name="line.1926"></a>
<span class="sourceLineNo">1927</span>            updateValueSize(kv.getValueLength());<a name="line.1927"></a>
<span class="sourceLineNo">1928</span>          } else {<a name="line.1928"></a>
<span class="sourceLineNo">1929</span>            put.addColumn(familyName, qualifier, value);<a name="line.1929"></a>
<span class="sourceLineNo">1930</span>            updateValueSize(value.length);<a name="line.1930"></a>
<span class="sourceLineNo">1931</span>          }<a name="line.1931"></a>
<span class="sourceLineNo">1932</span>        }<a name="line.1932"></a>
<span class="sourceLineNo">1933</span>      }<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>      put.setDurability(opts.writeToWAL ? Durability.SYNC_WAL : Durability.SKIP_WAL);<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>      if (opts.autoFlush) {<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>        table.put(put);<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>      } else {<a name="line.1937"></a>
<span class="sourceLineNo">1938</span>        mutator.mutate(put);<a name="line.1938"></a>
<span class="sourceLineNo">1939</span>      }<a name="line.1939"></a>
<span class="sourceLineNo">1940</span>    }<a name="line.1940"></a>
<span class="sourceLineNo">1941</span>  }<a name="line.1941"></a>
<span class="sourceLineNo">1942</span><a name="line.1942"></a>
<span class="sourceLineNo">1943</span>  static class ScanTest extends TableTest {<a name="line.1943"></a>
<span class="sourceLineNo">1944</span>    private ResultScanner testScanner;<a name="line.1944"></a>
<span class="sourceLineNo">1945</span><a name="line.1945"></a>
<span class="sourceLineNo">1946</span>    ScanTest(Connection con, TestOptions options, Status status) {<a name="line.1946"></a>
<span class="sourceLineNo">1947</span>      super(con, options, status);<a name="line.1947"></a>
<span class="sourceLineNo">1948</span>    }<a name="line.1948"></a>
<span class="sourceLineNo">1949</span><a name="line.1949"></a>
<span class="sourceLineNo">1950</span>    @Override<a name="line.1950"></a>
<span class="sourceLineNo">1951</span>    void testTakedown() throws IOException {<a name="line.1951"></a>
<span class="sourceLineNo">1952</span>      if (this.testScanner != null) {<a name="line.1952"></a>
<span class="sourceLineNo">1953</span>        this.testScanner.close();<a name="line.1953"></a>
<span class="sourceLineNo">1954</span>      }<a name="line.1954"></a>
<span class="sourceLineNo">1955</span>      super.testTakedown();<a name="line.1955"></a>
<span class="sourceLineNo">1956</span>    }<a name="line.1956"></a>
<span class="sourceLineNo">1957</span><a name="line.1957"></a>
<span class="sourceLineNo">1958</span><a name="line.1958"></a>
<span class="sourceLineNo">1959</span>    @Override<a name="line.1959"></a>
<span class="sourceLineNo">1960</span>    void testRow(final int i) throws IOException {<a name="line.1960"></a>
<span class="sourceLineNo">1961</span>      if (this.testScanner == null) {<a name="line.1961"></a>
<span class="sourceLineNo">1962</span>        Scan scan = new Scan().withStartRow(format(opts.startRow)).setCaching(opts.caching)<a name="line.1962"></a>
<span class="sourceLineNo">1963</span>            .setCacheBlocks(opts.cacheBlocks).setAsyncPrefetch(opts.asyncPrefetch)<a name="line.1963"></a>
<span class="sourceLineNo">1964</span>            .setReadType(opts.scanReadType).setScanMetricsEnabled(true);<a name="line.1964"></a>
<span class="sourceLineNo">1965</span>        for (int family = 0; family &lt; opts.families; family++) {<a name="line.1965"></a>
<span class="sourceLineNo">1966</span>          byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1966"></a>
<span class="sourceLineNo">1967</span>          if (opts.addColumns) {<a name="line.1967"></a>
<span class="sourceLineNo">1968</span>            for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1968"></a>
<span class="sourceLineNo">1969</span>              byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.1969"></a>
<span class="sourceLineNo">1970</span>              scan.addColumn(familyName, qualifier);<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>            }<a name="line.1971"></a>
<span class="sourceLineNo">1972</span>          } else {<a name="line.1972"></a>
<span class="sourceLineNo">1973</span>            scan.addFamily(familyName);<a name="line.1973"></a>
<span class="sourceLineNo">1974</span>          }<a name="line.1974"></a>
<span class="sourceLineNo">1975</span>        }<a name="line.1975"></a>
<span class="sourceLineNo">1976</span>        if (opts.filterAll) {<a name="line.1976"></a>
<span class="sourceLineNo">1977</span>          scan.setFilter(new FilterAllFilter());<a name="line.1977"></a>
<span class="sourceLineNo">1978</span>        }<a name="line.1978"></a>
<span class="sourceLineNo">1979</span>        this.testScanner = table.getScanner(scan);<a name="line.1979"></a>
<span class="sourceLineNo">1980</span>      }<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>      Result r = testScanner.next();<a name="line.1981"></a>
<span class="sourceLineNo">1982</span>      updateValueSize(r);<a name="line.1982"></a>
<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
<span class="sourceLineNo">1984</span>  }<a name="line.1984"></a>
<span class="sourceLineNo">1985</span><a name="line.1985"></a>
<span class="sourceLineNo">1986</span>  /**<a name="line.1986"></a>
<span class="sourceLineNo">1987</span>   * Base class for operations that are CAS-like; that read a value and then set it based off what<a name="line.1987"></a>
<span class="sourceLineNo">1988</span>   * they read. In this category is increment, append, checkAndPut, etc.<a name="line.1988"></a>
<span class="sourceLineNo">1989</span>   *<a name="line.1989"></a>
<span class="sourceLineNo">1990</span>   * &lt;p&gt;These operations also want some concurrency going on. Usually when these tests run, they<a name="line.1990"></a>
<span class="sourceLineNo">1991</span>   * operate in their own part of the key range. In CASTest, we will have them all overlap on the<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>   * same key space. We do this with our getStartRow and getLastRow overrides.<a name="line.1992"></a>
<span class="sourceLineNo">1993</span>   */<a name="line.1993"></a>
<span class="sourceLineNo">1994</span>  static abstract class CASTableTest extends TableTest {<a name="line.1994"></a>
<span class="sourceLineNo">1995</span>    private final byte [] qualifier;<a name="line.1995"></a>
<span class="sourceLineNo">1996</span>    CASTableTest(Connection con, TestOptions options, Status status) {<a name="line.1996"></a>
<span class="sourceLineNo">1997</span>      super(con, options, status);<a name="line.1997"></a>
<span class="sourceLineNo">1998</span>      qualifier = Bytes.toBytes(this.getClass().getSimpleName());<a name="line.1998"></a>
<span class="sourceLineNo">1999</span>    }<a name="line.1999"></a>
<span class="sourceLineNo">2000</span><a name="line.2000"></a>
<span class="sourceLineNo">2001</span>    byte [] getQualifier() {<a name="line.2001"></a>
<span class="sourceLineNo">2002</span>      return this.qualifier;<a name="line.2002"></a>
<span class="sourceLineNo">2003</span>    }<a name="line.2003"></a>
<span class="sourceLineNo">2004</span><a name="line.2004"></a>
<span class="sourceLineNo">2005</span>    @Override<a name="line.2005"></a>
<span class="sourceLineNo">2006</span>    int getStartRow() {<a name="line.2006"></a>
<span class="sourceLineNo">2007</span>      return 0;<a name="line.2007"></a>
<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
<span class="sourceLineNo">2009</span><a name="line.2009"></a>
<span class="sourceLineNo">2010</span>    @Override<a name="line.2010"></a>
<span class="sourceLineNo">2011</span>    int getLastRow() {<a name="line.2011"></a>
<span class="sourceLineNo">2012</span>      return opts.perClientRunRows;<a name="line.2012"></a>
<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
<span class="sourceLineNo">2014</span>  }<a name="line.2014"></a>
<span class="sourceLineNo">2015</span><a name="line.2015"></a>
<span class="sourceLineNo">2016</span>  static class IncrementTest extends CASTableTest {<a name="line.2016"></a>
<span class="sourceLineNo">2017</span>    IncrementTest(Connection con, TestOptions options, Status status) {<a name="line.2017"></a>
<span class="sourceLineNo">2018</span>      super(con, options, status);<a name="line.2018"></a>
<span class="sourceLineNo">2019</span>    }<a name="line.2019"></a>
<span class="sourceLineNo">2020</span><a name="line.2020"></a>
<span class="sourceLineNo">2021</span>    @Override<a name="line.2021"></a>
<span class="sourceLineNo">2022</span>    void testRow(final int i) throws IOException {<a name="line.2022"></a>
<span class="sourceLineNo">2023</span>      Increment increment = new Increment(format(i));<a name="line.2023"></a>
<span class="sourceLineNo">2024</span>      // unlike checkAndXXX tests, which make most sense to do on a single value,<a name="line.2024"></a>
<span class="sourceLineNo">2025</span>      // if multiple families are specified for an increment test we assume it is<a name="line.2025"></a>
<span class="sourceLineNo">2026</span>      // meant to raise the work factor<a name="line.2026"></a>
<span class="sourceLineNo">2027</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.2027"></a>
<span class="sourceLineNo">2028</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.2028"></a>
<span class="sourceLineNo">2029</span>        increment.addColumn(familyName, getQualifier(), 1l);<a name="line.2029"></a>
<span class="sourceLineNo">2030</span>      }<a name="line.2030"></a>
<span class="sourceLineNo">2031</span>      updateValueSize(this.table.increment(increment));<a name="line.2031"></a>
<span class="sourceLineNo">2032</span>    }<a name="line.2032"></a>
<span class="sourceLineNo">2033</span>  }<a name="line.2033"></a>
<span class="sourceLineNo">2034</span><a name="line.2034"></a>
<span class="sourceLineNo">2035</span>  static class AppendTest extends CASTableTest {<a name="line.2035"></a>
<span class="sourceLineNo">2036</span>    AppendTest(Connection con, TestOptions options, Status status) {<a name="line.2036"></a>
<span class="sourceLineNo">2037</span>      super(con, options, status);<a name="line.2037"></a>
<span class="sourceLineNo">2038</span>    }<a name="line.2038"></a>
<span class="sourceLineNo">2039</span><a name="line.2039"></a>
<span class="sourceLineNo">2040</span>    @Override<a name="line.2040"></a>
<span class="sourceLineNo">2041</span>    void testRow(final int i) throws IOException {<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>      byte [] bytes = format(i);<a name="line.2042"></a>
<span class="sourceLineNo">2043</span>      Append append = new Append(bytes);<a name="line.2043"></a>
<span class="sourceLineNo">2044</span>      // unlike checkAndXXX tests, which make most sense to do on a single value,<a name="line.2044"></a>
<span class="sourceLineNo">2045</span>      // if multiple families are specified for an append test we assume it is<a name="line.2045"></a>
<span class="sourceLineNo">2046</span>      // meant to raise the work factor<a name="line.2046"></a>
<span class="sourceLineNo">2047</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.2047"></a>
<span class="sourceLineNo">2048</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.2048"></a>
<span class="sourceLineNo">2049</span>        append.addColumn(familyName, getQualifier(), bytes);<a name="line.2049"></a>
<span class="sourceLineNo">2050</span>      }<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>      updateValueSize(this.table.append(append));<a name="line.2051"></a>
<span class="sourceLineNo">2052</span>    }<a name="line.2052"></a>
<span class="sourceLineNo">2053</span>  }<a name="line.2053"></a>
<span class="sourceLineNo">2054</span><a name="line.2054"></a>
<span class="sourceLineNo">2055</span>  static class CheckAndMutateTest extends CASTableTest {<a name="line.2055"></a>
<span class="sourceLineNo">2056</span>    CheckAndMutateTest(Connection con, TestOptions options, Status status) {<a name="line.2056"></a>
<span class="sourceLineNo">2057</span>      super(con, options, status);<a name="line.2057"></a>
<span class="sourceLineNo">2058</span>    }<a name="line.2058"></a>
<span class="sourceLineNo">2059</span><a name="line.2059"></a>
<span class="sourceLineNo">2060</span>    @Override<a name="line.2060"></a>
<span class="sourceLineNo">2061</span>    void testRow(final int i) throws IOException {<a name="line.2061"></a>
<span class="sourceLineNo">2062</span>      final byte [] bytes = format(i);<a name="line.2062"></a>
<span class="sourceLineNo">2063</span>      // checkAndXXX tests operate on only a single value<a name="line.2063"></a>
<span class="sourceLineNo">2064</span>      // Put a known value so when we go to check it, it is there.<a name="line.2064"></a>
<span class="sourceLineNo">2065</span>      Put put = new Put(bytes);<a name="line.2065"></a>
<span class="sourceLineNo">2066</span>      put.addColumn(FAMILY_ZERO, getQualifier(), bytes);<a name="line.2066"></a>
<span class="sourceLineNo">2067</span>      this.table.put(put);<a name="line.2067"></a>
<span class="sourceLineNo">2068</span>      RowMutations mutations = new RowMutations(bytes);<a name="line.2068"></a>
<span class="sourceLineNo">2069</span>      mutations.add(put);<a name="line.2069"></a>
<span class="sourceLineNo">2070</span>      this.table.checkAndMutate(bytes, FAMILY_ZERO).qualifier(getQualifier())<a name="line.2070"></a>
<span class="sourceLineNo">2071</span>          .ifEquals(bytes).thenMutate(mutations);<a name="line.2071"></a>
<span class="sourceLineNo">2072</span>    }<a name="line.2072"></a>
<span class="sourceLineNo">2073</span>  }<a name="line.2073"></a>
<span class="sourceLineNo">2074</span><a name="line.2074"></a>
<span class="sourceLineNo">2075</span>  static class CheckAndPutTest extends CASTableTest {<a name="line.2075"></a>
<span class="sourceLineNo">2076</span>    CheckAndPutTest(Connection con, TestOptions options, Status status) {<a name="line.2076"></a>
<span class="sourceLineNo">2077</span>      super(con, options, status);<a name="line.2077"></a>
<span class="sourceLineNo">2078</span>    }<a name="line.2078"></a>
<span class="sourceLineNo">2079</span><a name="line.2079"></a>
<span class="sourceLineNo">2080</span>    @Override<a name="line.2080"></a>
<span class="sourceLineNo">2081</span>    void testRow(final int i) throws IOException {<a name="line.2081"></a>
<span class="sourceLineNo">2082</span>      final byte [] bytes = format(i);<a name="line.2082"></a>
<span class="sourceLineNo">2083</span>      // checkAndXXX tests operate on only a single value<a name="line.2083"></a>
<span class="sourceLineNo">2084</span>      // Put a known value so when we go to check it, it is there.<a name="line.2084"></a>
<span class="sourceLineNo">2085</span>      Put put = new Put(bytes);<a name="line.2085"></a>
<span class="sourceLineNo">2086</span>      put.addColumn(FAMILY_ZERO, getQualifier(), bytes);<a name="line.2086"></a>
<span class="sourceLineNo">2087</span>      this.table.put(put);<a name="line.2087"></a>
<span class="sourceLineNo">2088</span>      this.table.checkAndMutate(bytes, FAMILY_ZERO).qualifier(getQualifier())<a name="line.2088"></a>
<span class="sourceLineNo">2089</span>          .ifEquals(bytes).thenPut(put);<a name="line.2089"></a>
<span class="sourceLineNo">2090</span>    }<a name="line.2090"></a>
<span class="sourceLineNo">2091</span>  }<a name="line.2091"></a>
<span class="sourceLineNo">2092</span><a name="line.2092"></a>
<span class="sourceLineNo">2093</span>  static class CheckAndDeleteTest extends CASTableTest {<a name="line.2093"></a>
<span class="sourceLineNo">2094</span>    CheckAndDeleteTest(Connection con, TestOptions options, Status status) {<a name="line.2094"></a>
<span class="sourceLineNo">2095</span>      super(con, options, status);<a name="line.2095"></a>
<span class="sourceLineNo">2096</span>    }<a name="line.2096"></a>
<span class="sourceLineNo">2097</span><a name="line.2097"></a>
<span class="sourceLineNo">2098</span>    @Override<a name="line.2098"></a>
<span class="sourceLineNo">2099</span>    void testRow(final int i) throws IOException {<a name="line.2099"></a>
<span class="sourceLineNo">2100</span>      final byte [] bytes = format(i);<a name="line.2100"></a>
<span class="sourceLineNo">2101</span>      // checkAndXXX tests operate on only a single value<a name="line.2101"></a>
<span class="sourceLineNo">2102</span>      // Put a known value so when we go to check it, it is there.<a name="line.2102"></a>
<span class="sourceLineNo">2103</span>      Put put = new Put(bytes);<a name="line.2103"></a>
<span class="sourceLineNo">2104</span>      put.addColumn(FAMILY_ZERO, getQualifier(), bytes);<a name="line.2104"></a>
<span class="sourceLineNo">2105</span>      this.table.put(put);<a name="line.2105"></a>
<span class="sourceLineNo">2106</span>      Delete delete = new Delete(put.getRow());<a name="line.2106"></a>
<span class="sourceLineNo">2107</span>      delete.addColumn(FAMILY_ZERO, getQualifier());<a name="line.2107"></a>
<span class="sourceLineNo">2108</span>      this.table.checkAndMutate(bytes, FAMILY_ZERO).qualifier(getQualifier())<a name="line.2108"></a>
<span class="sourceLineNo">2109</span>          .ifEquals(bytes).thenDelete(delete);<a name="line.2109"></a>
<span class="sourceLineNo">2110</span>    }<a name="line.2110"></a>
<span class="sourceLineNo">2111</span>  }<a name="line.2111"></a>
<span class="sourceLineNo">2112</span><a name="line.2112"></a>
<span class="sourceLineNo">2113</span>  static class SequentialReadTest extends TableTest {<a name="line.2113"></a>
<span class="sourceLineNo">2114</span>    SequentialReadTest(Connection con, TestOptions options, Status status) {<a name="line.2114"></a>
<span class="sourceLineNo">2115</span>      super(con, options, status);<a name="line.2115"></a>
<span class="sourceLineNo">2116</span>    }<a name="line.2116"></a>
<span class="sourceLineNo">2117</span><a name="line.2117"></a>
<span class="sourceLineNo">2118</span>    @Override<a name="line.2118"></a>
<span class="sourceLineNo">2119</span>    void testRow(final int i) throws IOException {<a name="line.2119"></a>
<span class="sourceLineNo">2120</span>      Get get = new Get(format(i));<a name="line.2120"></a>
<span class="sourceLineNo">2121</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.2121"></a>
<span class="sourceLineNo">2122</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.2122"></a>
<span class="sourceLineNo">2123</span>        if (opts.addColumns) {<a name="line.2123"></a>
<span class="sourceLineNo">2124</span>          for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2124"></a>
<span class="sourceLineNo">2125</span>            byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2125"></a>
<span class="sourceLineNo">2126</span>            get.addColumn(familyName, qualifier);<a name="line.2126"></a>
<span class="sourceLineNo">2127</span>          }<a name="line.2127"></a>
<span class="sourceLineNo">2128</span>        } else {<a name="line.2128"></a>
<span class="sourceLineNo">2129</span>          get.addFamily(familyName);<a name="line.2129"></a>
<span class="sourceLineNo">2130</span>        }<a name="line.2130"></a>
<span class="sourceLineNo">2131</span>      }<a name="line.2131"></a>
<span class="sourceLineNo">2132</span>      if (opts.filterAll) {<a name="line.2132"></a>
<span class="sourceLineNo">2133</span>        get.setFilter(new FilterAllFilter());<a name="line.2133"></a>
<span class="sourceLineNo">2134</span>      }<a name="line.2134"></a>
<span class="sourceLineNo">2135</span>      updateValueSize(table.get(get));<a name="line.2135"></a>
<span class="sourceLineNo">2136</span>    }<a name="line.2136"></a>
<span class="sourceLineNo">2137</span>  }<a name="line.2137"></a>
<span class="sourceLineNo">2138</span><a name="line.2138"></a>
<span class="sourceLineNo">2139</span>  static class SequentialWriteTest extends BufferedMutatorTest {<a name="line.2139"></a>
<span class="sourceLineNo">2140</span>    SequentialWriteTest(Connection con, TestOptions options, Status status) {<a name="line.2140"></a>
<span class="sourceLineNo">2141</span>      super(con, options, status);<a name="line.2141"></a>
<span class="sourceLineNo">2142</span>    }<a name="line.2142"></a>
<span class="sourceLineNo">2143</span><a name="line.2143"></a>
<span class="sourceLineNo">2144</span>    @Override<a name="line.2144"></a>
<span class="sourceLineNo">2145</span>    void testRow(final int i) throws IOException {<a name="line.2145"></a>
<span class="sourceLineNo">2146</span>      byte[] row = format(i);<a name="line.2146"></a>
<span class="sourceLineNo">2147</span>      Put put = new Put(row);<a name="line.2147"></a>
<span class="sourceLineNo">2148</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.2148"></a>
<span class="sourceLineNo">2149</span>        byte familyName[] = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.2149"></a>
<span class="sourceLineNo">2150</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2150"></a>
<span class="sourceLineNo">2151</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2151"></a>
<span class="sourceLineNo">2152</span>          byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2152"></a>
<span class="sourceLineNo">2153</span>          if (opts.useTags) {<a name="line.2153"></a>
<span class="sourceLineNo">2154</span>            byte[] tag = generateData(this.rand, TAG_LENGTH);<a name="line.2154"></a>
<span class="sourceLineNo">2155</span>            Tag[] tags = new Tag[opts.noOfTags];<a name="line.2155"></a>
<span class="sourceLineNo">2156</span>            for (int n = 0; n &lt; opts.noOfTags; n++) {<a name="line.2156"></a>
<span class="sourceLineNo">2157</span>              Tag t = new ArrayBackedTag((byte) n, tag);<a name="line.2157"></a>
<span class="sourceLineNo">2158</span>              tags[n] = t;<a name="line.2158"></a>
<span class="sourceLineNo">2159</span>            }<a name="line.2159"></a>
<span class="sourceLineNo">2160</span>            KeyValue kv = new KeyValue(row, familyName, qualifier, HConstants.LATEST_TIMESTAMP,<a name="line.2160"></a>
<span class="sourceLineNo">2161</span>              value, tags);<a name="line.2161"></a>
<span class="sourceLineNo">2162</span>            put.add(kv);<a name="line.2162"></a>
<span class="sourceLineNo">2163</span>            updateValueSize(kv.getValueLength());<a name="line.2163"></a>
<span class="sourceLineNo">2164</span>          } else {<a name="line.2164"></a>
<span class="sourceLineNo">2165</span>            put.addColumn(familyName, qualifier, value);<a name="line.2165"></a>
<span class="sourceLineNo">2166</span>            updateValueSize(value.length);<a name="line.2166"></a>
<span class="sourceLineNo">2167</span>          }<a name="line.2167"></a>
<span class="sourceLineNo">2168</span>        }<a name="line.2168"></a>
<span class="sourceLineNo">2169</span>      }<a name="line.2169"></a>
<span class="sourceLineNo">2170</span>      put.setDurability(opts.writeToWAL ? Durability.SYNC_WAL : Durability.SKIP_WAL);<a name="line.2170"></a>
<span class="sourceLineNo">2171</span>      if (opts.autoFlush) {<a name="line.2171"></a>
<span class="sourceLineNo">2172</span>        table.put(put);<a name="line.2172"></a>
<span class="sourceLineNo">2173</span>      } else {<a name="line.2173"></a>
<span class="sourceLineNo">2174</span>        mutator.mutate(put);<a name="line.2174"></a>
<span class="sourceLineNo">2175</span>      }<a name="line.2175"></a>
<span class="sourceLineNo">2176</span>    }<a name="line.2176"></a>
<span class="sourceLineNo">2177</span>  }<a name="line.2177"></a>
<span class="sourceLineNo">2178</span><a name="line.2178"></a>
<span class="sourceLineNo">2179</span>  static class FilteredScanTest extends TableTest {<a name="line.2179"></a>
<span class="sourceLineNo">2180</span>    protected static final Logger LOG = LoggerFactory.getLogger(FilteredScanTest.class.getName());<a name="line.2180"></a>
<span class="sourceLineNo">2181</span><a name="line.2181"></a>
<span class="sourceLineNo">2182</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2182"></a>
<span class="sourceLineNo">2183</span>      super(con, options, status);<a name="line.2183"></a>
<span class="sourceLineNo">2184</span>    }<a name="line.2184"></a>
<span class="sourceLineNo">2185</span><a name="line.2185"></a>
<span class="sourceLineNo">2186</span>    @Override<a name="line.2186"></a>
<span class="sourceLineNo">2187</span>    void testRow(int i) throws IOException {<a name="line.2187"></a>
<span class="sourceLineNo">2188</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2188"></a>
<span class="sourceLineNo">2189</span>      Scan scan = constructScan(value);<a name="line.2189"></a>
<span class="sourceLineNo">2190</span>      ResultScanner scanner = null;<a name="line.2190"></a>
<span class="sourceLineNo">2191</span>      try {<a name="line.2191"></a>
<span class="sourceLineNo">2192</span>        scanner = this.table.getScanner(scan);<a name="line.2192"></a>
<span class="sourceLineNo">2193</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2193"></a>
<span class="sourceLineNo">2194</span>          updateValueSize(r);<a name="line.2194"></a>
<span class="sourceLineNo">2195</span>        }<a name="line.2195"></a>
<span class="sourceLineNo">2196</span>      } finally {<a name="line.2196"></a>
<span class="sourceLineNo">2197</span>        if (scanner != null) {<a name="line.2197"></a>
<span class="sourceLineNo">2198</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2198"></a>
<span class="sourceLineNo">2199</span>          scanner.close();<a name="line.2199"></a>
<span class="sourceLineNo">2200</span>        }<a name="line.2200"></a>
<span class="sourceLineNo">2201</span>      }<a name="line.2201"></a>
<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
<span class="sourceLineNo">2203</span><a name="line.2203"></a>
<span class="sourceLineNo">2204</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2204"></a>
<span class="sourceLineNo">2205</span>      FilterList list = new FilterList();<a name="line.2205"></a>
<span class="sourceLineNo">2206</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO,<a name="line.2206"></a>
<span class="sourceLineNo">2207</span>        CompareOperator.EQUAL, new BinaryComparator(valuePrefix));<a name="line.2207"></a>
<span class="sourceLineNo">2208</span>      list.addFilter(filter);<a name="line.2208"></a>
<span class="sourceLineNo">2209</span>      if (opts.filterAll) {<a name="line.2209"></a>
<span class="sourceLineNo">2210</span>        list.addFilter(new FilterAllFilter());<a name="line.2210"></a>
<span class="sourceLineNo">2211</span>      }<a name="line.2211"></a>
<span class="sourceLineNo">2212</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2212"></a>
<span class="sourceLineNo">2213</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2213"></a>
<span class="sourceLineNo">2214</span>          .setScanMetricsEnabled(true);<a name="line.2214"></a>
<span class="sourceLineNo">2215</span>      if (opts.addColumns) {<a name="line.2215"></a>
<span class="sourceLineNo">2216</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2216"></a>
<span class="sourceLineNo">2217</span>          byte [] qualifier = column == 0? COLUMN_ZERO: Bytes.toBytes("" + column);<a name="line.2217"></a>
<span class="sourceLineNo">2218</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2218"></a>
<span class="sourceLineNo">2219</span>        }<a name="line.2219"></a>
<span class="sourceLineNo">2220</span>      } else {<a name="line.2220"></a>
<span class="sourceLineNo">2221</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2221"></a>
<span class="sourceLineNo">2222</span>      }<a name="line.2222"></a>
<span class="sourceLineNo">2223</span>      scan.setFilter(list);<a name="line.2223"></a>
<span class="sourceLineNo">2224</span>      return scan;<a name="line.2224"></a>
<span class="sourceLineNo">2225</span>    }<a name="line.2225"></a>
<span class="sourceLineNo">2226</span>  }<a name="line.2226"></a>
<span class="sourceLineNo">2227</span><a name="line.2227"></a>
<span class="sourceLineNo">2228</span>  /**<a name="line.2228"></a>
<span class="sourceLineNo">2229</span>   * Compute a throughput rate in MB/s.<a name="line.2229"></a>
<span class="sourceLineNo">2230</span>   * @param rows Number of records consumed.<a name="line.2230"></a>
<span class="sourceLineNo">2231</span>   * @param timeMs Time taken in milliseconds.<a name="line.2231"></a>
<span class="sourceLineNo">2232</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2232"></a>
<span class="sourceLineNo">2233</span>   */<a name="line.2233"></a>
<span class="sourceLineNo">2234</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families, int columns) {<a name="line.2234"></a>
<span class="sourceLineNo">2235</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH +<a name="line.2235"></a>
<span class="sourceLineNo">2236</span>      ((valueSize + (FAMILY_NAME_BASE.length()+1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2236"></a>
<span class="sourceLineNo">2237</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2237"></a>
<span class="sourceLineNo">2238</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT)<a name="line.2238"></a>
<span class="sourceLineNo">2239</span>      .divide(BYTES_PER_MB, CXT);<a name="line.2239"></a>
<span class="sourceLineNo">2240</span>    return FMT.format(mbps) + " MB/s";<a name="line.2240"></a>
<span class="sourceLineNo">2241</span>  }<a name="line.2241"></a>
<span class="sourceLineNo">2242</span><a name="line.2242"></a>
<span class="sourceLineNo">2243</span>  /*<a name="line.2243"></a>
<span class="sourceLineNo">2244</span>   * Format passed integer.<a name="line.2244"></a>
<span class="sourceLineNo">2245</span>   * @param number<a name="line.2245"></a>
<span class="sourceLineNo">2246</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed<a name="line.2246"></a>
<span class="sourceLineNo">2247</span>   * number (Does absolute in case number is negative).<a name="line.2247"></a>
<span class="sourceLineNo">2248</span>   */<a name="line.2248"></a>
<span class="sourceLineNo">2249</span>  public static byte [] format(final int number) {<a name="line.2249"></a>
<span class="sourceLineNo">2250</span>    byte [] b = new byte[ROW_LENGTH];<a name="line.2250"></a>
<span class="sourceLineNo">2251</span>    int d = Math.abs(number);<a name="line.2251"></a>
<span class="sourceLineNo">2252</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2252"></a>
<span class="sourceLineNo">2253</span>      b[i] = (byte)((d % 10) + '0');<a name="line.2253"></a>
<span class="sourceLineNo">2254</span>      d /= 10;<a name="line.2254"></a>
<span class="sourceLineNo">2255</span>    }<a name="line.2255"></a>
<span class="sourceLineNo">2256</span>    return b;<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>   * This method takes some time and is done inline uploading data.  For<a name="line.2260"></a>
<span class="sourceLineNo">2261</span>   * example, doing the mapfile test, generation of the key and value<a name="line.2261"></a>
<span class="sourceLineNo">2262</span>   * consumes about 30% of CPU time.<a name="line.2262"></a>
<span class="sourceLineNo">2263</span>   * @return Generated random value to insert into a table cell.<a name="line.2263"></a>
<span class="sourceLineNo">2264</span>   */<a name="line.2264"></a>
<span class="sourceLineNo">2265</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2265"></a>
<span class="sourceLineNo">2266</span>    byte [] b = new byte [length];<a name="line.2266"></a>
<span class="sourceLineNo">2267</span>    int i;<a name="line.2267"></a>
<span class="sourceLineNo">2268</span><a name="line.2268"></a>
<span class="sourceLineNo">2269</span>    for(i = 0; i &lt; (length-8); i += 8) {<a name="line.2269"></a>
<span class="sourceLineNo">2270</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2270"></a>
<span class="sourceLineNo">2271</span>      b[i+1] = b[i];<a name="line.2271"></a>
<span class="sourceLineNo">2272</span>      b[i+2] = b[i];<a name="line.2272"></a>
<span class="sourceLineNo">2273</span>      b[i+3] = b[i];<a name="line.2273"></a>
<span class="sourceLineNo">2274</span>      b[i+4] = b[i];<a name="line.2274"></a>
<span class="sourceLineNo">2275</span>      b[i+5] = b[i];<a name="line.2275"></a>
<span class="sourceLineNo">2276</span>      b[i+6] = b[i];<a name="line.2276"></a>
<span class="sourceLineNo">2277</span>      b[i+7] = b[i];<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>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2280"></a>
<span class="sourceLineNo">2281</span>    for(; i &lt; length; i++) {<a name="line.2281"></a>
<span class="sourceLineNo">2282</span>      b[i] = a;<a name="line.2282"></a>
<span class="sourceLineNo">2283</span>    }<a name="line.2283"></a>
<span class="sourceLineNo">2284</span>    return b;<a name="line.2284"></a>
<span class="sourceLineNo">2285</span>  }<a name="line.2285"></a>
<span class="sourceLineNo">2286</span><a name="line.2286"></a>
<span class="sourceLineNo">2287</span>  static byte [] getRandomRow(final Random random, final int totalRows) {<a name="line.2287"></a>
<span class="sourceLineNo">2288</span>    return format(generateRandomRow(random, totalRows));<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>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2291"></a>
<span class="sourceLineNo">2292</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<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>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2295"></a>
<span class="sourceLineNo">2296</span>      Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2296"></a>
<span class="sourceLineNo">2297</span>      throws IOException, InterruptedException {<a name="line.2297"></a>
<span class="sourceLineNo">2298</span>    status.setStatus("Start " + cmd + " at offset " + opts.startRow + " for "<a name="line.2298"></a>
<span class="sourceLineNo">2299</span>        + opts.perClientRunRows + " rows");<a name="line.2299"></a>
<span class="sourceLineNo">2300</span>    long totalElapsedTime;<a name="line.2300"></a>
<span class="sourceLineNo">2301</span><a name="line.2301"></a>
<span class="sourceLineNo">2302</span>    final TestBase t;<a name="line.2302"></a>
<span class="sourceLineNo">2303</span>    try {<a name="line.2303"></a>
<span class="sourceLineNo">2304</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2304"></a>
<span class="sourceLineNo">2305</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2305"></a>
<span class="sourceLineNo">2306</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2306"></a>
<span class="sourceLineNo">2307</span>            newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2307"></a>
<span class="sourceLineNo">2308</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2308"></a>
<span class="sourceLineNo">2309</span>      } else {<a name="line.2309"></a>
<span class="sourceLineNo">2310</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2310"></a>
<span class="sourceLineNo">2311</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2311"></a>
<span class="sourceLineNo">2312</span>            newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2312"></a>
<span class="sourceLineNo">2313</span>        t = constructor.newInstance(con, opts, status);<a name="line.2313"></a>
<span class="sourceLineNo">2314</span>      }<a name="line.2314"></a>
<span class="sourceLineNo">2315</span>    } catch (NoSuchMethodException e) {<a name="line.2315"></a>
<span class="sourceLineNo">2316</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2316"></a>
<span class="sourceLineNo">2317</span>          + ".  It does not provide a constructor as described by "<a name="line.2317"></a>
<span class="sourceLineNo">2318</span>          + "the javadoc comment.  Available constructors are: "<a name="line.2318"></a>
<span class="sourceLineNo">2319</span>          + Arrays.toString(cmd.getConstructors()));<a name="line.2319"></a>
<span class="sourceLineNo">2320</span>    } catch (Exception e) {<a name="line.2320"></a>
<span class="sourceLineNo">2321</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2321"></a>
<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
<span class="sourceLineNo">2323</span>    totalElapsedTime = t.test();<a name="line.2323"></a>
<span class="sourceLineNo">2324</span><a name="line.2324"></a>
<span class="sourceLineNo">2325</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime +<a name="line.2325"></a>
<span class="sourceLineNo">2326</span>      "ms at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows" +<a name="line.2326"></a>
<span class="sourceLineNo">2327</span>      " (" + calculateMbps((int)(opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2327"></a>
<span class="sourceLineNo">2328</span>          getAverageValueLength(opts), opts.families, opts.columns) + ")");<a name="line.2328"></a>
<span class="sourceLineNo">2329</span><a name="line.2329"></a>
<span class="sourceLineNo">2330</span>    return new RunResult(totalElapsedTime, t.getLatencyHistogram());<a name="line.2330"></a>
<span class="sourceLineNo">2331</span>  }<a name="line.2331"></a>
<span class="sourceLineNo">2332</span><a name="line.2332"></a>
<span class="sourceLineNo">2333</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2333"></a>
<span class="sourceLineNo">2334</span>    return opts.valueRandom? opts.valueSize/2: opts.valueSize;<a name="line.2334"></a>
<span class="sourceLineNo">2335</span>  }<a name="line.2335"></a>
<span class="sourceLineNo">2336</span><a name="line.2336"></a>
<span class="sourceLineNo">2337</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts) throws IOException,<a name="line.2337"></a>
<span class="sourceLineNo">2338</span>      InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2338"></a>
<span class="sourceLineNo">2339</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2339"></a>
<span class="sourceLineNo">2340</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2340"></a>
<span class="sourceLineNo">2341</span>    LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));<a name="line.2341"></a>
<span class="sourceLineNo">2342</span>    Admin admin = null;<a name="line.2342"></a>
<span class="sourceLineNo">2343</span>    Connection connection = null;<a name="line.2343"></a>
<span class="sourceLineNo">2344</span>    try {<a name="line.2344"></a>
<span class="sourceLineNo">2345</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2345"></a>
<span class="sourceLineNo">2346</span>      admin = connection.getAdmin();<a name="line.2346"></a>
<span class="sourceLineNo">2347</span>      checkTable(admin, opts);<a name="line.2347"></a>
<span class="sourceLineNo">2348</span>    } finally {<a name="line.2348"></a>
<span class="sourceLineNo">2349</span>      if (admin != null) admin.close();<a name="line.2349"></a>
<span class="sourceLineNo">2350</span>      if (connection != null) connection.close();<a name="line.2350"></a>
<span class="sourceLineNo">2351</span>    }<a name="line.2351"></a>
<span class="sourceLineNo">2352</span>    if (opts.nomapred) {<a name="line.2352"></a>
<span class="sourceLineNo">2353</span>      doLocalClients(opts, getConf());<a name="line.2353"></a>
<span class="sourceLineNo">2354</span>    } else {<a name="line.2354"></a>
<span class="sourceLineNo">2355</span>      doMapReduce(opts, getConf());<a name="line.2355"></a>
<span class="sourceLineNo">2356</span>    }<a name="line.2356"></a>
<span class="sourceLineNo">2357</span>  }<a name="line.2357"></a>
<span class="sourceLineNo">2358</span><a name="line.2358"></a>
<span class="sourceLineNo">2359</span>  protected void printUsage() {<a name="line.2359"></a>
<span class="sourceLineNo">2360</span>    printUsage(this.getClass().getName(), null);<a name="line.2360"></a>
<span class="sourceLineNo">2361</span>  }<a name="line.2361"></a>
<span class="sourceLineNo">2362</span><a name="line.2362"></a>
<span class="sourceLineNo">2363</span>  protected static void printUsage(final String message) {<a name="line.2363"></a>
<span class="sourceLineNo">2364</span>    printUsage(PerformanceEvaluation.class.getName(), message);<a name="line.2364"></a>
<span class="sourceLineNo">2365</span>  }<a name="line.2365"></a>
<span class="sourceLineNo">2366</span><a name="line.2366"></a>
<span class="sourceLineNo">2367</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2367"></a>
<span class="sourceLineNo">2368</span>    printUsage(message);<a name="line.2368"></a>
<span class="sourceLineNo">2369</span>    System.exit(exitCode);<a name="line.2369"></a>
<span class="sourceLineNo">2370</span>  }<a name="line.2370"></a>
<span class="sourceLineNo">2371</span><a name="line.2371"></a>
<span class="sourceLineNo">2372</span>  protected static void printUsage(final String className, final String message) {<a name="line.2372"></a>
<span class="sourceLineNo">2373</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2373"></a>
<span class="sourceLineNo">2374</span>      System.err.println(message);<a name="line.2374"></a>
<span class="sourceLineNo">2375</span>    }<a name="line.2375"></a>
<span class="sourceLineNo">2376</span>    System.err.println("Usage: java " + className + " \\");<a name="line.2376"></a>
<span class="sourceLineNo">2377</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command&gt; &lt;nclients&gt;");<a name="line.2377"></a>
<span class="sourceLineNo">2378</span>    System.err.println();<a name="line.2378"></a>
<span class="sourceLineNo">2379</span>    System.err.println("General Options:");<a name="line.2379"></a>
<span class="sourceLineNo">2380</span>    System.err.println(" nomapred        Run multiple clients using threads " +<a name="line.2380"></a>
<span class="sourceLineNo">2381</span>      "(rather than use mapreduce)");<a name="line.2381"></a>
<span class="sourceLineNo">2382</span>    System.err.println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2382"></a>
<span class="sourceLineNo">2383</span>    System.err.println(" sampleRate      Execute test on a sample of total " +<a name="line.2383"></a>
<span class="sourceLineNo">2384</span>      "rows. Only supported by randomRead. Default: 1.0");<a name="line.2384"></a>
<span class="sourceLineNo">2385</span>    System.err.println(" period          Report every 'period' rows: " +<a name="line.2385"></a>
<span class="sourceLineNo">2386</span>      "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows()/10);<a name="line.2386"></a>
<span class="sourceLineNo">2387</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2387"></a>
<span class="sourceLineNo">2388</span>    System.err.println(" traceRate       Enable HTrace spans. Initiate tracing every N rows. " +<a name="line.2388"></a>
<span class="sourceLineNo">2389</span>      "Default: 0");<a name="line.2389"></a>
<span class="sourceLineNo">2390</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2390"></a>
<span class="sourceLineNo">2391</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'" +<a name="line.2391"></a>
<span class="sourceLineNo">2392</span>        " rows have been treated. Default: 0");<a name="line.2392"></a>
<span class="sourceLineNo">2393</span>    System.err.println(" valueSize       Pass value size to use: Default: "<a name="line.2393"></a>
<span class="sourceLineNo">2394</span>        + DEFAULT_OPTS.getValueSize());<a name="line.2394"></a>
<span class="sourceLineNo">2395</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and " +<a name="line.2395"></a>
<span class="sourceLineNo">2396</span>        "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2396"></a>
<span class="sourceLineNo">2397</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2397"></a>
<span class="sourceLineNo">2398</span>        + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2398"></a>
<span class="sourceLineNo">2399</span>    System.err.println();<a name="line.2399"></a>
<span class="sourceLineNo">2400</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2400"></a>
<span class="sourceLineNo">2401</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2401"></a>
<span class="sourceLineNo">2402</span>    System.err.println(" rows            Rows each client runs. Default: "<a name="line.2402"></a>
<span class="sourceLineNo">2403</span>        + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2403"></a>
<span class="sourceLineNo">2404</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2404"></a>
<span class="sourceLineNo">2405</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2405"></a>
<span class="sourceLineNo">2406</span>        + " the total range specified by the size.");<a name="line.2406"></a>
<span class="sourceLineNo">2407</span>    System.err.println(<a name="line.2407"></a>
<span class="sourceLineNo">2408</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2408"></a>
<span class="sourceLineNo">2409</span>          + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2409"></a>
<span class="sourceLineNo">2410</span>          + " use size to specify the end range and --rows"<a name="line.2410"></a>
<span class="sourceLineNo">2411</span>          + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2411"></a>
<span class="sourceLineNo">2412</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2412"></a>
<span class="sourceLineNo">2413</span>    System.err.println(" flushCommits    Used to determine if the test should flush the table. " +<a name="line.2413"></a>
<span class="sourceLineNo">2414</span>      "Default: false");<a name="line.2414"></a>
<span class="sourceLineNo">2415</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and " +<a name="line.2415"></a>
<span class="sourceLineNo">2416</span>        "'valueSize' in zipf form: Default: Not set.");<a name="line.2416"></a>
<span class="sourceLineNo">2417</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2417"></a>
<span class="sourceLineNo">2418</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2418"></a>
<span class="sourceLineNo">2419</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2419"></a>
<span class="sourceLineNo">2420</span>        + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2420"></a>
<span class="sourceLineNo">2421</span>        + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2421"></a>
<span class="sourceLineNo">2422</span>    System.err.println(" usetags         Writes tags along with KVs. Use with HFile V3. " +<a name="line.2422"></a>
<span class="sourceLineNo">2423</span>      "Default: false");<a name="line.2423"></a>
<span class="sourceLineNo">2424</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. " +<a name="line.2424"></a>
<span class="sourceLineNo">2425</span>       "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2425"></a>
<span class="sourceLineNo">2426</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2426"></a>
<span class="sourceLineNo">2427</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2427"></a>
<span class="sourceLineNo">2428</span>    System.err.println(" families        Specify number of column families for the table. Default: 1");<a name="line.2428"></a>
<span class="sourceLineNo">2429</span>    System.err.println();<a name="line.2429"></a>
<span class="sourceLineNo">2430</span>    System.err.println("Read Tests:");<a name="line.2430"></a>
<span class="sourceLineNo">2431</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2431"></a>
<span class="sourceLineNo">2432</span>        + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2432"></a>
<span class="sourceLineNo">2433</span>        + " performance.  Uses FilterAllFilter internally. ");<a name="line.2433"></a>
<span class="sourceLineNo">2434</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported " +<a name="line.2434"></a>
<span class="sourceLineNo">2435</span>      "by randomRead. Default: disabled");<a name="line.2435"></a>
<span class="sourceLineNo">2436</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF " +<a name="line.2436"></a>
<span class="sourceLineNo">2437</span>      "inmemory as far as possible. Not guaranteed that reads are always served " +<a name="line.2437"></a>
<span class="sourceLineNo">2438</span>      "from memory.  Default: false");<a name="line.2438"></a>
<span class="sourceLineNo">2439</span>    System.err.println(" bloomFilter     Bloom filter type, one of "<a name="line.2439"></a>
<span class="sourceLineNo">2440</span>        + Arrays.toString(BloomType.values()));<a name="line.2440"></a>
<span class="sourceLineNo">2441</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2441"></a>
<span class="sourceLineNo">2442</span>    System.err.println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2442"></a>
<span class="sourceLineNo">2443</span>        + "Uses the CompactingMemstore");<a name="line.2443"></a>
<span class="sourceLineNo">2444</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2444"></a>
<span class="sourceLineNo">2445</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2445"></a>
<span class="sourceLineNo">2446</span>    System.err.println(" randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2446"></a>
<span class="sourceLineNo">2447</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2447"></a>
<span class="sourceLineNo">2448</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2448"></a>
<span class="sourceLineNo">2449</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2449"></a>
<span class="sourceLineNo">2450</span>    System.err.println(" scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2450"></a>
<span class="sourceLineNo">2451</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2451"></a>
<span class="sourceLineNo">2452</span>    System.err.println();<a name="line.2452"></a>
<span class="sourceLineNo">2453</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2453"></a>
<span class="sourceLineNo">2454</span>    System.err.println("  For example: ");<a name="line.2454"></a>
<span class="sourceLineNo">2455</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2455"></a>
<span class="sourceLineNo">2456</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2456"></a>
<span class="sourceLineNo">2457</span>    System.err.println();<a name="line.2457"></a>
<span class="sourceLineNo">2458</span>    System.err.println("Command:");<a name="line.2458"></a>
<span class="sourceLineNo">2459</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2459"></a>
<span class="sourceLineNo">2460</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2460"></a>
<span class="sourceLineNo">2461</span>    }<a name="line.2461"></a>
<span class="sourceLineNo">2462</span>    System.err.println();<a name="line.2462"></a>
<span class="sourceLineNo">2463</span>    System.err.println("Args:");<a name="line.2463"></a>
<span class="sourceLineNo">2464</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2464"></a>
<span class="sourceLineNo">2465</span>        + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2465"></a>
<span class="sourceLineNo">2466</span>    System.err.println("Examples:");<a name="line.2466"></a>
<span class="sourceLineNo">2467</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2467"></a>
<span class="sourceLineNo">2468</span>    System.err.println(" $ hbase " + className + " sequentialWrite 1");<a name="line.2468"></a>
<span class="sourceLineNo">2469</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2469"></a>
<span class="sourceLineNo">2470</span>    System.err.println(" $ hbase " + className + " --rows=10 --nomapred increment 10");<a name="line.2470"></a>
<span class="sourceLineNo">2471</span>  }<a name="line.2471"></a>
<span class="sourceLineNo">2472</span><a name="line.2472"></a>
<span class="sourceLineNo">2473</span>  /**<a name="line.2473"></a>
<span class="sourceLineNo">2474</span>   * Parse options passed in via an arguments array. Assumes that array has been split<a name="line.2474"></a>
<span class="sourceLineNo">2475</span>   * on white-space and placed into a {@code Queue}. Any unknown arguments will remain<a name="line.2475"></a>
<span class="sourceLineNo">2476</span>   * in the queue at the conclusion of this method call. It's up to the caller to deal<a name="line.2476"></a>
<span class="sourceLineNo">2477</span>   * with these unrecognized arguments.<a name="line.2477"></a>
<span class="sourceLineNo">2478</span>   */<a name="line.2478"></a>
<span class="sourceLineNo">2479</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2479"></a>
<span class="sourceLineNo">2480</span>    TestOptions opts = new TestOptions();<a name="line.2480"></a>
<span class="sourceLineNo">2481</span><a name="line.2481"></a>
<span class="sourceLineNo">2482</span>    String cmd = null;<a name="line.2482"></a>
<span class="sourceLineNo">2483</span>    while ((cmd = args.poll()) != null) {<a name="line.2483"></a>
<span class="sourceLineNo">2484</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2484"></a>
<span class="sourceLineNo">2485</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2485"></a>
<span class="sourceLineNo">2486</span>        args.add(cmd);<a name="line.2486"></a>
<span class="sourceLineNo">2487</span>        break;<a name="line.2487"></a>
<span class="sourceLineNo">2488</span>      }<a name="line.2488"></a>
<span class="sourceLineNo">2489</span><a name="line.2489"></a>
<span class="sourceLineNo">2490</span>      final String nmr = "--nomapred";<a name="line.2490"></a>
<span class="sourceLineNo">2491</span>      if (cmd.startsWith(nmr)) {<a name="line.2491"></a>
<span class="sourceLineNo">2492</span>        opts.nomapred = true;<a name="line.2492"></a>
<span class="sourceLineNo">2493</span>        continue;<a name="line.2493"></a>
<span class="sourceLineNo">2494</span>      }<a name="line.2494"></a>
<span class="sourceLineNo">2495</span><a name="line.2495"></a>
<span class="sourceLineNo">2496</span>      final String rows = "--rows=";<a name="line.2496"></a>
<span class="sourceLineNo">2497</span>      if (cmd.startsWith(rows)) {<a name="line.2497"></a>
<span class="sourceLineNo">2498</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2498"></a>
<span class="sourceLineNo">2499</span>        continue;<a name="line.2499"></a>
<span class="sourceLineNo">2500</span>      }<a name="line.2500"></a>
<span class="sourceLineNo">2501</span><a name="line.2501"></a>
<span class="sourceLineNo">2502</span>      final String cycles = "--cycles=";<a name="line.2502"></a>
<span class="sourceLineNo">2503</span>      if (cmd.startsWith(cycles)) {<a name="line.2503"></a>
<span class="sourceLineNo">2504</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2504"></a>
<span class="sourceLineNo">2505</span>        continue;<a name="line.2505"></a>
<span class="sourceLineNo">2506</span>      }<a name="line.2506"></a>
<span class="sourceLineNo">2507</span><a name="line.2507"></a>
<span class="sourceLineNo">2508</span>      final String sampleRate = "--sampleRate=";<a name="line.2508"></a>
<span class="sourceLineNo">2509</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2509"></a>
<span class="sourceLineNo">2510</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2510"></a>
<span class="sourceLineNo">2511</span>        continue;<a name="line.2511"></a>
<span class="sourceLineNo">2512</span>      }<a name="line.2512"></a>
<span class="sourceLineNo">2513</span><a name="line.2513"></a>
<span class="sourceLineNo">2514</span>      final String table = "--table=";<a name="line.2514"></a>
<span class="sourceLineNo">2515</span>      if (cmd.startsWith(table)) {<a name="line.2515"></a>
<span class="sourceLineNo">2516</span>        opts.tableName = cmd.substring(table.length());<a name="line.2516"></a>
<span class="sourceLineNo">2517</span>        continue;<a name="line.2517"></a>
<span class="sourceLineNo">2518</span>      }<a name="line.2518"></a>
<span class="sourceLineNo">2519</span><a name="line.2519"></a>
<span class="sourceLineNo">2520</span>      final String startRow = "--startRow=";<a name="line.2520"></a>
<span class="sourceLineNo">2521</span>      if (cmd.startsWith(startRow)) {<a name="line.2521"></a>
<span class="sourceLineNo">2522</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2522"></a>
<span class="sourceLineNo">2523</span>        continue;<a name="line.2523"></a>
<span class="sourceLineNo">2524</span>      }<a name="line.2524"></a>
<span class="sourceLineNo">2525</span><a name="line.2525"></a>
<span class="sourceLineNo">2526</span>      final String compress = "--compress=";<a name="line.2526"></a>
<span class="sourceLineNo">2527</span>      if (cmd.startsWith(compress)) {<a name="line.2527"></a>
<span class="sourceLineNo">2528</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2528"></a>
<span class="sourceLineNo">2529</span>        continue;<a name="line.2529"></a>
<span class="sourceLineNo">2530</span>      }<a name="line.2530"></a>
<span class="sourceLineNo">2531</span><a name="line.2531"></a>
<span class="sourceLineNo">2532</span>      final String traceRate = "--traceRate=";<a name="line.2532"></a>
<span class="sourceLineNo">2533</span>      if (cmd.startsWith(traceRate)) {<a name="line.2533"></a>
<span class="sourceLineNo">2534</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2534"></a>
<span class="sourceLineNo">2535</span>        continue;<a name="line.2535"></a>
<span class="sourceLineNo">2536</span>      }<a name="line.2536"></a>
<span class="sourceLineNo">2537</span><a name="line.2537"></a>
<span class="sourceLineNo">2538</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2538"></a>
<span class="sourceLineNo">2539</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2539"></a>
<span class="sourceLineNo">2540</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2540"></a>
<span class="sourceLineNo">2541</span>        continue;<a name="line.2541"></a>
<span class="sourceLineNo">2542</span>      }<a name="line.2542"></a>
<span class="sourceLineNo">2543</span><a name="line.2543"></a>
<span class="sourceLineNo">2544</span>      final String flushCommits = "--flushCommits=";<a name="line.2544"></a>
<span class="sourceLineNo">2545</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2545"></a>
<span class="sourceLineNo">2546</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2546"></a>
<span class="sourceLineNo">2547</span>        continue;<a name="line.2547"></a>
<span class="sourceLineNo">2548</span>      }<a name="line.2548"></a>
<span class="sourceLineNo">2549</span><a name="line.2549"></a>
<span class="sourceLineNo">2550</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2550"></a>
<span class="sourceLineNo">2551</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2551"></a>
<span class="sourceLineNo">2552</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2552"></a>
<span class="sourceLineNo">2553</span>        continue;<a name="line.2553"></a>
<span class="sourceLineNo">2554</span>      }<a name="line.2554"></a>
<span class="sourceLineNo">2555</span><a name="line.2555"></a>
<span class="sourceLineNo">2556</span>      final String presplit = "--presplit=";<a name="line.2556"></a>
<span class="sourceLineNo">2557</span>      if (cmd.startsWith(presplit)) {<a name="line.2557"></a>
<span class="sourceLineNo">2558</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2558"></a>
<span class="sourceLineNo">2559</span>        continue;<a name="line.2559"></a>
<span class="sourceLineNo">2560</span>      }<a name="line.2560"></a>
<span class="sourceLineNo">2561</span><a name="line.2561"></a>
<span class="sourceLineNo">2562</span>      final String inMemory = "--inmemory=";<a name="line.2562"></a>
<span class="sourceLineNo">2563</span>      if (cmd.startsWith(inMemory)) {<a name="line.2563"></a>
<span class="sourceLineNo">2564</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2564"></a>
<span class="sourceLineNo">2565</span>        continue;<a name="line.2565"></a>
<span class="sourceLineNo">2566</span>      }<a name="line.2566"></a>
<span class="sourceLineNo">2567</span><a name="line.2567"></a>
<span class="sourceLineNo">2568</span>      final String autoFlush = "--autoFlush=";<a name="line.2568"></a>
<span class="sourceLineNo">2569</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2569"></a>
<span class="sourceLineNo">2570</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2570"></a>
<span class="sourceLineNo">2571</span>        continue;<a name="line.2571"></a>
<span class="sourceLineNo">2572</span>      }<a name="line.2572"></a>
<span class="sourceLineNo">2573</span><a name="line.2573"></a>
<span class="sourceLineNo">2574</span>      final String onceCon = "--oneCon=";<a name="line.2574"></a>
<span class="sourceLineNo">2575</span>      if (cmd.startsWith(onceCon)) {<a name="line.2575"></a>
<span class="sourceLineNo">2576</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2576"></a>
<span class="sourceLineNo">2577</span>        continue;<a name="line.2577"></a>
<span class="sourceLineNo">2578</span>      }<a name="line.2578"></a>
<span class="sourceLineNo">2579</span><a name="line.2579"></a>
<span class="sourceLineNo">2580</span>      final String latency = "--latency";<a name="line.2580"></a>
<span class="sourceLineNo">2581</span>      if (cmd.startsWith(latency)) {<a name="line.2581"></a>
<span class="sourceLineNo">2582</span>        opts.reportLatency = true;<a name="line.2582"></a>
<span class="sourceLineNo">2583</span>        continue;<a name="line.2583"></a>
<span class="sourceLineNo">2584</span>      }<a name="line.2584"></a>
<span class="sourceLineNo">2585</span><a name="line.2585"></a>
<span class="sourceLineNo">2586</span>      final String multiGet = "--multiGet=";<a name="line.2586"></a>
<span class="sourceLineNo">2587</span>      if (cmd.startsWith(multiGet)) {<a name="line.2587"></a>
<span class="sourceLineNo">2588</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2588"></a>
<span class="sourceLineNo">2589</span>        continue;<a name="line.2589"></a>
<span class="sourceLineNo">2590</span>      }<a name="line.2590"></a>
<span class="sourceLineNo">2591</span><a name="line.2591"></a>
<span class="sourceLineNo">2592</span>      final String useTags = "--usetags=";<a name="line.2592"></a>
<span class="sourceLineNo">2593</span>      if (cmd.startsWith(useTags)) {<a name="line.2593"></a>
<span class="sourceLineNo">2594</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2594"></a>
<span class="sourceLineNo">2595</span>        continue;<a name="line.2595"></a>
<span class="sourceLineNo">2596</span>      }<a name="line.2596"></a>
<span class="sourceLineNo">2597</span><a name="line.2597"></a>
<span class="sourceLineNo">2598</span>      final String noOfTags = "--numoftags=";<a name="line.2598"></a>
<span class="sourceLineNo">2599</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2599"></a>
<span class="sourceLineNo">2600</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2600"></a>
<span class="sourceLineNo">2601</span>        continue;<a name="line.2601"></a>
<span class="sourceLineNo">2602</span>      }<a name="line.2602"></a>
<span class="sourceLineNo">2603</span><a name="line.2603"></a>
<span class="sourceLineNo">2604</span>      final String replicas = "--replicas=";<a name="line.2604"></a>
<span class="sourceLineNo">2605</span>      if (cmd.startsWith(replicas)) {<a name="line.2605"></a>
<span class="sourceLineNo">2606</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2606"></a>
<span class="sourceLineNo">2607</span>        continue;<a name="line.2607"></a>
<span class="sourceLineNo">2608</span>      }<a name="line.2608"></a>
<span class="sourceLineNo">2609</span><a name="line.2609"></a>
<span class="sourceLineNo">2610</span>      final String filterOutAll = "--filterAll";<a name="line.2610"></a>
<span class="sourceLineNo">2611</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2611"></a>
<span class="sourceLineNo">2612</span>        opts.filterAll = true;<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 size = "--size=";<a name="line.2616"></a>
<span class="sourceLineNo">2617</span>      if (cmd.startsWith(size)) {<a name="line.2617"></a>
<span class="sourceLineNo">2618</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2618"></a>
<span class="sourceLineNo">2619</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2619"></a>
<span class="sourceLineNo">2620</span>        continue;<a name="line.2620"></a>
<span class="sourceLineNo">2621</span>      }<a name="line.2621"></a>
<span class="sourceLineNo">2622</span><a name="line.2622"></a>
<span class="sourceLineNo">2623</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2623"></a>
<span class="sourceLineNo">2624</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2624"></a>
<span class="sourceLineNo">2625</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2625"></a>
<span class="sourceLineNo">2626</span>        continue;<a name="line.2626"></a>
<span class="sourceLineNo">2627</span>      }<a name="line.2627"></a>
<span class="sourceLineNo">2628</span><a name="line.2628"></a>
<span class="sourceLineNo">2629</span>      final String randomSleep = "--randomSleep=";<a name="line.2629"></a>
<span class="sourceLineNo">2630</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2630"></a>
<span class="sourceLineNo">2631</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2631"></a>
<span class="sourceLineNo">2632</span>        continue;<a name="line.2632"></a>
<span class="sourceLineNo">2633</span>      }<a name="line.2633"></a>
<span class="sourceLineNo">2634</span><a name="line.2634"></a>
<span class="sourceLineNo">2635</span>      final String measureAfter = "--measureAfter=";<a name="line.2635"></a>
<span class="sourceLineNo">2636</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2636"></a>
<span class="sourceLineNo">2637</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2637"></a>
<span class="sourceLineNo">2638</span>        continue;<a name="line.2638"></a>
<span class="sourceLineNo">2639</span>      }<a name="line.2639"></a>
<span class="sourceLineNo">2640</span><a name="line.2640"></a>
<span class="sourceLineNo">2641</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2641"></a>
<span class="sourceLineNo">2642</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2642"></a>
<span class="sourceLineNo">2643</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2643"></a>
<span class="sourceLineNo">2644</span>        continue;<a name="line.2644"></a>
<span class="sourceLineNo">2645</span>      }<a name="line.2645"></a>
<span class="sourceLineNo">2646</span><a name="line.2646"></a>
<span class="sourceLineNo">2647</span>      final String blockSize = "--blockSize=";<a name="line.2647"></a>
<span class="sourceLineNo">2648</span>      if(cmd.startsWith(blockSize) ) {<a name="line.2648"></a>
<span class="sourceLineNo">2649</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.2649"></a>
<span class="sourceLineNo">2650</span>        continue;<a name="line.2650"></a>
<span class="sourceLineNo">2651</span>      }<a name="line.2651"></a>
<span class="sourceLineNo">2652</span><a name="line.2652"></a>
<span class="sourceLineNo">2653</span>      final String valueSize = "--valueSize=";<a name="line.2653"></a>
<span class="sourceLineNo">2654</span>      if (cmd.startsWith(valueSize)) {<a name="line.2654"></a>
<span class="sourceLineNo">2655</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.2655"></a>
<span class="sourceLineNo">2656</span>        continue;<a name="line.2656"></a>
<span class="sourceLineNo">2657</span>      }<a name="line.2657"></a>
<span class="sourceLineNo">2658</span><a name="line.2658"></a>
<span class="sourceLineNo">2659</span>      final String valueRandom = "--valueRandom";<a name="line.2659"></a>
<span class="sourceLineNo">2660</span>      if (cmd.startsWith(valueRandom)) {<a name="line.2660"></a>
<span class="sourceLineNo">2661</span>        opts.valueRandom = true;<a name="line.2661"></a>
<span class="sourceLineNo">2662</span>        if (opts.valueZipf) {<a name="line.2662"></a>
<span class="sourceLineNo">2663</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2663"></a>
<span class="sourceLineNo">2664</span>        }<a name="line.2664"></a>
<span class="sourceLineNo">2665</span>        continue;<a name="line.2665"></a>
<span class="sourceLineNo">2666</span>      }<a name="line.2666"></a>
<span class="sourceLineNo">2667</span><a name="line.2667"></a>
<span class="sourceLineNo">2668</span>      final String valueZipf = "--valueZipf";<a name="line.2668"></a>
<span class="sourceLineNo">2669</span>      if (cmd.startsWith(valueZipf)) {<a name="line.2669"></a>
<span class="sourceLineNo">2670</span>        opts.valueZipf = true;<a name="line.2670"></a>
<span class="sourceLineNo">2671</span>        if (opts.valueRandom) {<a name="line.2671"></a>
<span class="sourceLineNo">2672</span>          throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.2672"></a>
<span class="sourceLineNo">2673</span>        }<a name="line.2673"></a>
<span class="sourceLineNo">2674</span>        continue;<a name="line.2674"></a>
<span class="sourceLineNo">2675</span>      }<a name="line.2675"></a>
<span class="sourceLineNo">2676</span><a name="line.2676"></a>
<span class="sourceLineNo">2677</span>      final String period = "--period=";<a name="line.2677"></a>
<span class="sourceLineNo">2678</span>      if (cmd.startsWith(period)) {<a name="line.2678"></a>
<span class="sourceLineNo">2679</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.2679"></a>
<span class="sourceLineNo">2680</span>        continue;<a name="line.2680"></a>
<span class="sourceLineNo">2681</span>      }<a name="line.2681"></a>
<span class="sourceLineNo">2682</span><a name="line.2682"></a>
<span class="sourceLineNo">2683</span>      final String addColumns = "--addColumns=";<a name="line.2683"></a>
<span class="sourceLineNo">2684</span>      if (cmd.startsWith(addColumns)) {<a name="line.2684"></a>
<span class="sourceLineNo">2685</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.2685"></a>
<span class="sourceLineNo">2686</span>        continue;<a name="line.2686"></a>
<span class="sourceLineNo">2687</span>      }<a name="line.2687"></a>
<span class="sourceLineNo">2688</span><a name="line.2688"></a>
<span class="sourceLineNo">2689</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.2689"></a>
<span class="sourceLineNo">2690</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.2690"></a>
<span class="sourceLineNo">2691</span>        opts.inMemoryCompaction =<a name="line.2691"></a>
<span class="sourceLineNo">2692</span>            MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.2692"></a>
<span class="sourceLineNo">2693</span>        continue;<a name="line.2693"></a>
<span class="sourceLineNo">2694</span>      }<a name="line.2694"></a>
<span class="sourceLineNo">2695</span><a name="line.2695"></a>
<span class="sourceLineNo">2696</span>      final String columns = "--columns=";<a name="line.2696"></a>
<span class="sourceLineNo">2697</span>      if (cmd.startsWith(columns)) {<a name="line.2697"></a>
<span class="sourceLineNo">2698</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.2698"></a>
<span class="sourceLineNo">2699</span>        continue;<a name="line.2699"></a>
<span class="sourceLineNo">2700</span>      }<a name="line.2700"></a>
<span class="sourceLineNo">2701</span><a name="line.2701"></a>
<span class="sourceLineNo">2702</span>      final String families = "--families=";<a name="line.2702"></a>
<span class="sourceLineNo">2703</span>      if (cmd.startsWith(families)) {<a name="line.2703"></a>
<span class="sourceLineNo">2704</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.2704"></a>
<span class="sourceLineNo">2705</span>        continue;<a name="line.2705"></a>
<span class="sourceLineNo">2706</span>      }<a name="line.2706"></a>
<span class="sourceLineNo">2707</span><a name="line.2707"></a>
<span class="sourceLineNo">2708</span>      final String caching = "--caching=";<a name="line.2708"></a>
<span class="sourceLineNo">2709</span>      if (cmd.startsWith(caching)) {<a name="line.2709"></a>
<span class="sourceLineNo">2710</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.2710"></a>
<span class="sourceLineNo">2711</span>        continue;<a name="line.2711"></a>
<span class="sourceLineNo">2712</span>      }<a name="line.2712"></a>
<span class="sourceLineNo">2713</span><a name="line.2713"></a>
<span class="sourceLineNo">2714</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.2714"></a>
<span class="sourceLineNo">2715</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.2715"></a>
<span class="sourceLineNo">2716</span>        opts.asyncPrefetch = true;<a name="line.2716"></a>
<span class="sourceLineNo">2717</span>        continue;<a name="line.2717"></a>
<span class="sourceLineNo">2718</span>      }<a name="line.2718"></a>
<span class="sourceLineNo">2719</span><a name="line.2719"></a>
<span class="sourceLineNo">2720</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.2720"></a>
<span class="sourceLineNo">2721</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.2721"></a>
<span class="sourceLineNo">2722</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.2722"></a>
<span class="sourceLineNo">2723</span>        continue;<a name="line.2723"></a>
<span class="sourceLineNo">2724</span>      }<a name="line.2724"></a>
<span class="sourceLineNo">2725</span><a name="line.2725"></a>
<span class="sourceLineNo">2726</span>      final String scanReadType = "--scanReadType=";<a name="line.2726"></a>
<span class="sourceLineNo">2727</span>      if (cmd.startsWith(scanReadType)) {<a name="line.2727"></a>
<span class="sourceLineNo">2728</span>        opts.scanReadType =<a name="line.2728"></a>
<span class="sourceLineNo">2729</span>            Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.2729"></a>
<span class="sourceLineNo">2730</span>        continue;<a name="line.2730"></a>
<span class="sourceLineNo">2731</span>      }<a name="line.2731"></a>
<span class="sourceLineNo">2732</span><a name="line.2732"></a>
<span class="sourceLineNo">2733</span>      final String bufferSize = "--bufferSize=";<a name="line.2733"></a>
<span class="sourceLineNo">2734</span>      if (cmd.startsWith(bufferSize)) {<a name="line.2734"></a>
<span class="sourceLineNo">2735</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.2735"></a>
<span class="sourceLineNo">2736</span>        continue;<a name="line.2736"></a>
<span class="sourceLineNo">2737</span>      }<a name="line.2737"></a>
<span class="sourceLineNo">2738</span><a name="line.2738"></a>
<span class="sourceLineNo">2739</span>      if (isCommandClass(cmd)) {<a name="line.2739"></a>
<span class="sourceLineNo">2740</span>        opts.cmdName = cmd;<a name="line.2740"></a>
<span class="sourceLineNo">2741</span>        try {<a name="line.2741"></a>
<span class="sourceLineNo">2742</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.2742"></a>
<span class="sourceLineNo">2743</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.2743"></a>
<span class="sourceLineNo">2744</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.2744"></a>
<span class="sourceLineNo">2745</span>        }<a name="line.2745"></a>
<span class="sourceLineNo">2746</span>        opts = calculateRowsAndSize(opts);<a name="line.2746"></a>
<span class="sourceLineNo">2747</span>        break;<a name="line.2747"></a>
<span class="sourceLineNo">2748</span>      } else {<a name="line.2748"></a>
<span class="sourceLineNo">2749</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.2749"></a>
<span class="sourceLineNo">2750</span>      }<a name="line.2750"></a>
<span class="sourceLineNo">2751</span><a name="line.2751"></a>
<span class="sourceLineNo">2752</span>      // Not matching any option or command.<a name="line.2752"></a>
<span class="sourceLineNo">2753</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.2753"></a>
<span class="sourceLineNo">2754</span>      args.add(cmd);<a name="line.2754"></a>
<span class="sourceLineNo">2755</span>      break;<a name="line.2755"></a>
<span class="sourceLineNo">2756</span>    }<a name="line.2756"></a>
<span class="sourceLineNo">2757</span>    return opts;<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>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.2760"></a>
<span class="sourceLineNo">2761</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.2761"></a>
<span class="sourceLineNo">2762</span>    if ((opts.getCmdName() != null<a name="line.2762"></a>
<span class="sourceLineNo">2763</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.2763"></a>
<span class="sourceLineNo">2764</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size<a name="line.2764"></a>
<span class="sourceLineNo">2765</span>        &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows) {<a name="line.2765"></a>
<span class="sourceLineNo">2766</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2766"></a>
<span class="sourceLineNo">2767</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.2767"></a>
<span class="sourceLineNo">2768</span>      // total size in GB specified<a name="line.2768"></a>
<span class="sourceLineNo">2769</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.2769"></a>
<span class="sourceLineNo">2770</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.2770"></a>
<span class="sourceLineNo">2771</span>    } else {<a name="line.2771"></a>
<span class="sourceLineNo">2772</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.2772"></a>
<span class="sourceLineNo">2773</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.2773"></a>
<span class="sourceLineNo">2774</span>    }<a name="line.2774"></a>
<span class="sourceLineNo">2775</span>    return opts;<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>  static int getRowsPerGB(final TestOptions opts) {<a name="line.2778"></a>
<span class="sourceLineNo">2779</span>    return ONE_GB / ((opts.valueRandom? opts.valueSize/2: opts.valueSize) * opts.getFamilies() *<a name="line.2779"></a>
<span class="sourceLineNo">2780</span>        opts.getColumns());<a name="line.2780"></a>
<span class="sourceLineNo">2781</span>  }<a name="line.2781"></a>
<span class="sourceLineNo">2782</span><a name="line.2782"></a>
<span class="sourceLineNo">2783</span>  @Override<a name="line.2783"></a>
<span class="sourceLineNo">2784</span>  public int run(String[] args) throws Exception {<a name="line.2784"></a>
<span class="sourceLineNo">2785</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.2785"></a>
<span class="sourceLineNo">2786</span>    // (but hopefully something not as painful as cli options).<a name="line.2786"></a>
<span class="sourceLineNo">2787</span>    int errCode = -1;<a name="line.2787"></a>
<span class="sourceLineNo">2788</span>    if (args.length &lt; 1) {<a name="line.2788"></a>
<span class="sourceLineNo">2789</span>      printUsage();<a name="line.2789"></a>
<span class="sourceLineNo">2790</span>      return errCode;<a name="line.2790"></a>
<span class="sourceLineNo">2791</span>    }<a name="line.2791"></a>
<span class="sourceLineNo">2792</span><a name="line.2792"></a>
<span class="sourceLineNo">2793</span>    try {<a name="line.2793"></a>
<span class="sourceLineNo">2794</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.2794"></a>
<span class="sourceLineNo">2795</span>      argv.addAll(Arrays.asList(args));<a name="line.2795"></a>
<span class="sourceLineNo">2796</span>      TestOptions opts = parseOpts(argv);<a name="line.2796"></a>
<span class="sourceLineNo">2797</span><a name="line.2797"></a>
<span class="sourceLineNo">2798</span>      // args remaining, print help and exit<a name="line.2798"></a>
<span class="sourceLineNo">2799</span>      if (!argv.isEmpty()) {<a name="line.2799"></a>
<span class="sourceLineNo">2800</span>        errCode = 0;<a name="line.2800"></a>
<span class="sourceLineNo">2801</span>        printUsage();<a name="line.2801"></a>
<span class="sourceLineNo">2802</span>        return errCode;<a name="line.2802"></a>
<span class="sourceLineNo">2803</span>      }<a name="line.2803"></a>
<span class="sourceLineNo">2804</span><a name="line.2804"></a>
<span class="sourceLineNo">2805</span>      // must run at least 1 client<a name="line.2805"></a>
<span class="sourceLineNo">2806</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.2806"></a>
<span class="sourceLineNo">2807</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.2807"></a>
<span class="sourceLineNo">2808</span>      }<a name="line.2808"></a>
<span class="sourceLineNo">2809</span><a name="line.2809"></a>
<span class="sourceLineNo">2810</span>      // cmdName should not be null, print help and exit<a name="line.2810"></a>
<span class="sourceLineNo">2811</span>      if (opts.cmdName == null) {<a name="line.2811"></a>
<span class="sourceLineNo">2812</span>        printUsage();<a name="line.2812"></a>
<span class="sourceLineNo">2813</span>        return errCode;<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>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.2816"></a>
<span class="sourceLineNo">2817</span>      if (cmdClass != null) {<a name="line.2817"></a>
<span class="sourceLineNo">2818</span>        runTest(cmdClass, opts);<a name="line.2818"></a>
<span class="sourceLineNo">2819</span>        errCode = 0;<a name="line.2819"></a>
<span class="sourceLineNo">2820</span>      }<a name="line.2820"></a>
<span class="sourceLineNo">2821</span><a name="line.2821"></a>
<span class="sourceLineNo">2822</span>    } catch (Exception e) {<a name="line.2822"></a>
<span class="sourceLineNo">2823</span>      e.printStackTrace();<a name="line.2823"></a>
<span class="sourceLineNo">2824</span>    }<a name="line.2824"></a>
<span class="sourceLineNo">2825</span><a name="line.2825"></a>
<span class="sourceLineNo">2826</span>    return errCode;<a name="line.2826"></a>
<span class="sourceLineNo">2827</span>  }<a name="line.2827"></a>
<span class="sourceLineNo">2828</span><a name="line.2828"></a>
<span class="sourceLineNo">2829</span>  private static boolean isCommandClass(String cmd) {<a name="line.2829"></a>
<span class="sourceLineNo">2830</span>    return COMMANDS.containsKey(cmd);<a name="line.2830"></a>
<span class="sourceLineNo">2831</span>  }<a name="line.2831"></a>
<span class="sourceLineNo">2832</span><a name="line.2832"></a>
<span class="sourceLineNo">2833</span>  private static Class&lt;? extends TestBase&gt; determineCommandClass(String cmd) {<a name="line.2833"></a>
<span class="sourceLineNo">2834</span>    CmdDescriptor descriptor = COMMANDS.get(cmd);<a name="line.2834"></a>
<span class="sourceLineNo">2835</span>    return descriptor != null ? descriptor.getCmdClass() : null;<a name="line.2835"></a>
<span class="sourceLineNo">2836</span>  }<a name="line.2836"></a>
<span class="sourceLineNo">2837</span><a name="line.2837"></a>
<span class="sourceLineNo">2838</span>  public static void main(final String[] args) throws Exception {<a name="line.2838"></a>
<span class="sourceLineNo">2839</span>    int res = ToolRunner.run(new PerformanceEvaluation(HBaseConfiguration.create()), args);<a name="line.2839"></a>
<span class="sourceLineNo">2840</span>    System.exit(res);<a name="line.2840"></a>
<span class="sourceLineNo">2841</span>  }<a name="line.2841"></a>
<span class="sourceLineNo">2842</span>}<a name="line.2842"></a>




























































</pre>
</div>
</body>
</html>
