<!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> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
<span class="sourceLineNo">017</span> */<a name="line.17"></a>
<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import com.codahale.metrics.Histogram;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import com.codahale.metrics.UniformReservoir;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import io.opentelemetry.api.trace.Span;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import io.opentelemetry.context.Scope;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.io.PrintStream;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.lang.reflect.Constructor;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.math.BigDecimal;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.math.MathContext;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.text.DecimalFormat;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.text.SimpleDateFormat;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.util.ArrayList;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.Arrays;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.Date;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.LinkedList;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.List;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.Locale;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import java.util.Map;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.util.NoSuchElementException;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import java.util.Properties;<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>import java.util.concurrent.ThreadLocalRandom;<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.ColumnFamilyDescriptorBuilder;<a name="line.60"></a>
<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.61"></a>
<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.62"></a>
<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.Consistency;<a name="line.63"></a>
<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.64"></a>
<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Durability;<a name="line.65"></a>
<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Get;<a name="line.66"></a>
<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Increment;<a name="line.67"></a>
<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Put;<a name="line.68"></a>
<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.69"></a>
<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.70"></a>
<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.71"></a>
<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Result;<a name="line.72"></a>
<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.73"></a>
<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.RowMutations;<a name="line.74"></a>
<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.75"></a>
<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Table;<a name="line.76"></a>
<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.77"></a>
<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.78"></a>
<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.79"></a>
<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.filter.BinaryComparator;<a name="line.80"></a>
<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.filter.Filter;<a name="line.81"></a>
<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.filter.FilterAllFilter;<a name="line.82"></a>
<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.filter.FilterList;<a name="line.83"></a>
<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.filter.PageFilter;<a name="line.84"></a>
<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;<a name="line.85"></a>
<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.filter.WhileMatchFilter;<a name="line.86"></a>
<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.87"></a>
<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.88"></a>
<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;<a name="line.89"></a>
<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.90"></a>
<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.regionserver.CompactingMemStore;<a name="line.91"></a>
<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.92"></a>
<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.ByteArrayHashKey;<a name="line.93"></a>
<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.94"></a>
<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.95"></a>
<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.util.GsonUtil;<a name="line.96"></a>
<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.util.Hash;<a name="line.97"></a>
<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.util.MurmurHash;<a name="line.98"></a>
<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.99"></a>
<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.util.RandomDistribution;<a name="line.100"></a>
<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.util.YammerHistogramUtils;<a name="line.101"></a>
<span class="sourceLineNo">102</span>import org.apache.hadoop.io.LongWritable;<a name="line.102"></a>
<span class="sourceLineNo">103</span>import org.apache.hadoop.io.Text;<a name="line.103"></a>
<span class="sourceLineNo">104</span>import org.apache.hadoop.mapreduce.Job;<a name="line.104"></a>
<span class="sourceLineNo">105</span>import org.apache.hadoop.mapreduce.Mapper;<a name="line.105"></a>
<span class="sourceLineNo">106</span>import org.apache.hadoop.mapreduce.lib.input.NLineInputFormat;<a name="line.106"></a>
<span class="sourceLineNo">107</span>import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;<a name="line.107"></a>
<span class="sourceLineNo">108</span>import org.apache.hadoop.mapreduce.lib.reduce.LongSumReducer;<a name="line.108"></a>
<span class="sourceLineNo">109</span>import org.apache.hadoop.util.Tool;<a name="line.109"></a>
<span class="sourceLineNo">110</span>import org.apache.hadoop.util.ToolRunner;<a name="line.110"></a>
<span class="sourceLineNo">111</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.111"></a>
<span class="sourceLineNo">112</span>import org.slf4j.Logger;<a name="line.112"></a>
<span class="sourceLineNo">113</span>import org.slf4j.LoggerFactory;<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>import org.apache.hbase.thirdparty.com.google.common.base.MoreObjects;<a name="line.115"></a>
<span class="sourceLineNo">116</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.116"></a>
<span class="sourceLineNo">117</span>import org.apache.hbase.thirdparty.com.google.gson.Gson;<a name="line.117"></a>
<span class="sourceLineNo">118</span><a name="line.118"></a>
<span class="sourceLineNo">119</span>/**<a name="line.119"></a>
<span class="sourceLineNo">120</span> * Script used evaluating HBase performance and scalability. Runs a HBase client that steps through<a name="line.120"></a>
<span class="sourceLineNo">121</span> * one of a set of hardcoded tests or 'experiments' (e.g. a random reads test, a random writes test,<a name="line.121"></a>
<span class="sourceLineNo">122</span> * etc.). Pass on the command-line which test to run and how many clients are participating in this<a name="line.122"></a>
<span class="sourceLineNo">123</span> * experiment. Run {@code PerformanceEvaluation --help} to obtain usage.<a name="line.123"></a>
<span class="sourceLineNo">124</span> * &lt;p&gt;<a name="line.124"></a>
<span class="sourceLineNo">125</span> * This class sets up and runs the evaluation programs described in Section 7, &lt;i&gt;Performance<a name="line.125"></a>
<span class="sourceLineNo">126</span> * Evaluation&lt;/i&gt;, of the &lt;a href="http://labs.google.com/papers/bigtable.html"&gt;Bigtable&lt;/a&gt; paper,<a name="line.126"></a>
<span class="sourceLineNo">127</span> * pages 8-10.<a name="line.127"></a>
<span class="sourceLineNo">128</span> * &lt;p&gt;<a name="line.128"></a>
<span class="sourceLineNo">129</span> * By default, runs as a mapreduce job where each mapper runs a single test client. Can also run as<a name="line.129"></a>
<span class="sourceLineNo">130</span> * a non-mapreduce, multithreaded application by specifying {@code --nomapred}. Each client does<a name="line.130"></a>
<span class="sourceLineNo">131</span> * about 1GB of data, unless specified otherwise.<a name="line.131"></a>
<span class="sourceLineNo">132</span> */<a name="line.132"></a>
<span class="sourceLineNo">133</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.133"></a>
<span class="sourceLineNo">134</span>public class PerformanceEvaluation extends Configured implements Tool {<a name="line.134"></a>
<span class="sourceLineNo">135</span>  static final String RANDOM_SEEK_SCAN = "randomSeekScan";<a name="line.135"></a>
<span class="sourceLineNo">136</span>  static final String RANDOM_READ = "randomRead";<a name="line.136"></a>
<span class="sourceLineNo">137</span>  static final String PE_COMMAND_SHORTNAME = "pe";<a name="line.137"></a>
<span class="sourceLineNo">138</span>  private static final Logger LOG = LoggerFactory.getLogger(PerformanceEvaluation.class.getName());<a name="line.138"></a>
<span class="sourceLineNo">139</span>  private static final Gson GSON = GsonUtil.createGson().create();<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", "Run async scan test (read every row)");<a name="line.170"></a>
<span class="sourceLineNo">171</span>    addCommandDescriptor(RandomReadTest.class, RANDOM_READ, "Run random read test");<a name="line.171"></a>
<span class="sourceLineNo">172</span>    addCommandDescriptor(MetaRandomReadTest.class, "metaRandomRead", "Run getRegionLocation test");<a name="line.172"></a>
<span class="sourceLineNo">173</span>    addCommandDescriptor(RandomSeekScanTest.class, RANDOM_SEEK_SCAN,<a name="line.173"></a>
<span class="sourceLineNo">174</span>      "Run random seek and scan 100 test");<a name="line.174"></a>
<span class="sourceLineNo">175</span>    addCommandDescriptor(RandomScanWithRange10Test.class, "scanRange10",<a name="line.175"></a>
<span class="sourceLineNo">176</span>      "Run random seek scan with both start and stop row (max 10 rows)");<a name="line.176"></a>
<span class="sourceLineNo">177</span>    addCommandDescriptor(RandomScanWithRange100Test.class, "scanRange100",<a name="line.177"></a>
<span class="sourceLineNo">178</span>      "Run random seek scan with both start and stop row (max 100 rows)");<a name="line.178"></a>
<span class="sourceLineNo">179</span>    addCommandDescriptor(RandomScanWithRange1000Test.class, "scanRange1000",<a name="line.179"></a>
<span class="sourceLineNo">180</span>      "Run random seek scan with both start and stop row (max 1000 rows)");<a name="line.180"></a>
<span class="sourceLineNo">181</span>    addCommandDescriptor(RandomScanWithRange10000Test.class, "scanRange10000",<a name="line.181"></a>
<span class="sourceLineNo">182</span>      "Run random seek scan with both start and stop row (max 10000 rows)");<a name="line.182"></a>
<span class="sourceLineNo">183</span>    addCommandDescriptor(RandomWriteTest.class, "randomWrite", "Run random write test");<a name="line.183"></a>
<span class="sourceLineNo">184</span>    addCommandDescriptor(RandomDeleteTest.class, "randomDelete", "Run random delete test");<a name="line.184"></a>
<span class="sourceLineNo">185</span>    addCommandDescriptor(SequentialReadTest.class, "sequentialRead", "Run sequential read test");<a name="line.185"></a>
<span class="sourceLineNo">186</span>    addCommandDescriptor(SequentialWriteTest.class, "sequentialWrite", "Run sequential write test");<a name="line.186"></a>
<span class="sourceLineNo">187</span>    addCommandDescriptor(SequentialDeleteTest.class, "sequentialDelete",<a name="line.187"></a>
<span class="sourceLineNo">188</span>      "Run sequential delete test");<a name="line.188"></a>
<span class="sourceLineNo">189</span>    addCommandDescriptor(MetaWriteTest.class, "metaWrite",<a name="line.189"></a>
<span class="sourceLineNo">190</span>      "Populate meta table;used with 1 thread; to be cleaned up by cleanMeta");<a name="line.190"></a>
<span class="sourceLineNo">191</span>    addCommandDescriptor(ScanTest.class, "scan", "Run scan test (read every row)");<a name="line.191"></a>
<span class="sourceLineNo">192</span>    addCommandDescriptor(ReverseScanTest.class, "reverseScan",<a name="line.192"></a>
<span class="sourceLineNo">193</span>      "Run reverse scan test (read every row)");<a name="line.193"></a>
<span class="sourceLineNo">194</span>    addCommandDescriptor(FilteredScanTest.class, "filterScan",<a name="line.194"></a>
<span class="sourceLineNo">195</span>      "Run scan test using a filter to find a specific row based on it's value "<a name="line.195"></a>
<span class="sourceLineNo">196</span>        + "(make sure to use --rows=20)");<a name="line.196"></a>
<span class="sourceLineNo">197</span>    addCommandDescriptor(IncrementTest.class, "increment",<a name="line.197"></a>
<span class="sourceLineNo">198</span>      "Increment on each row; clients overlap on keyspace so some concurrent operations");<a name="line.198"></a>
<span class="sourceLineNo">199</span>    addCommandDescriptor(AppendTest.class, "append",<a name="line.199"></a>
<span class="sourceLineNo">200</span>      "Append on each row; clients overlap on keyspace so some concurrent operations");<a name="line.200"></a>
<span class="sourceLineNo">201</span>    addCommandDescriptor(CheckAndMutateTest.class, "checkAndMutate",<a name="line.201"></a>
<span class="sourceLineNo">202</span>      "CheckAndMutate on each row; clients overlap on keyspace so some concurrent operations");<a name="line.202"></a>
<span class="sourceLineNo">203</span>    addCommandDescriptor(CheckAndPutTest.class, "checkAndPut",<a name="line.203"></a>
<span class="sourceLineNo">204</span>      "CheckAndPut on each row; clients overlap on keyspace so some concurrent operations");<a name="line.204"></a>
<span class="sourceLineNo">205</span>    addCommandDescriptor(CheckAndDeleteTest.class, "checkAndDelete",<a name="line.205"></a>
<span class="sourceLineNo">206</span>      "CheckAndDelete on each row; clients overlap on keyspace so some concurrent operations");<a name="line.206"></a>
<span class="sourceLineNo">207</span>    addCommandDescriptor(CleanMetaTest.class, "cleanMeta",<a name="line.207"></a>
<span class="sourceLineNo">208</span>      "Remove fake region entries on meta table inserted by metaWrite; used with 1 thread");<a name="line.208"></a>
<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
<span class="sourceLineNo">210</span><a name="line.210"></a>
<span class="sourceLineNo">211</span>  /**<a name="line.211"></a>
<span class="sourceLineNo">212</span>   * Enum for map metrics. Keep it out here rather than inside in the Map inner-class so we can find<a name="line.212"></a>
<span class="sourceLineNo">213</span>   * associated properties.<a name="line.213"></a>
<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
<span class="sourceLineNo">215</span>  protected static enum Counter {<a name="line.215"></a>
<span class="sourceLineNo">216</span>    /** elapsed time */<a name="line.216"></a>
<span class="sourceLineNo">217</span>    ELAPSED_TIME,<a name="line.217"></a>
<span class="sourceLineNo">218</span>    /** number of rows */<a name="line.218"></a>
<span class="sourceLineNo">219</span>    ROWS<a name="line.219"></a>
<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
<span class="sourceLineNo">221</span><a name="line.221"></a>
<span class="sourceLineNo">222</span>  protected static class RunResult implements Comparable&lt;RunResult&gt; {<a name="line.222"></a>
<span class="sourceLineNo">223</span>    public RunResult(long duration, Histogram hist) {<a name="line.223"></a>
<span class="sourceLineNo">224</span>      this.duration = duration;<a name="line.224"></a>
<span class="sourceLineNo">225</span>      this.hist = hist;<a name="line.225"></a>
<span class="sourceLineNo">226</span>      numbOfReplyOverThreshold = 0;<a name="line.226"></a>
<span class="sourceLineNo">227</span>      numOfReplyFromReplica = 0;<a name="line.227"></a>
<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
<span class="sourceLineNo">229</span><a name="line.229"></a>
<span class="sourceLineNo">230</span>    public RunResult(long duration, long numbOfReplyOverThreshold, long numOfReplyFromReplica,<a name="line.230"></a>
<span class="sourceLineNo">231</span>      Histogram hist) {<a name="line.231"></a>
<span class="sourceLineNo">232</span>      this.duration = duration;<a name="line.232"></a>
<span class="sourceLineNo">233</span>      this.hist = hist;<a name="line.233"></a>
<span class="sourceLineNo">234</span>      this.numbOfReplyOverThreshold = numbOfReplyOverThreshold;<a name="line.234"></a>
<span class="sourceLineNo">235</span>      this.numOfReplyFromReplica = numOfReplyFromReplica;<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>    public final long duration;<a name="line.238"></a>
<span class="sourceLineNo">239</span>    public final Histogram hist;<a name="line.239"></a>
<span class="sourceLineNo">240</span>    public final long numbOfReplyOverThreshold;<a name="line.240"></a>
<span class="sourceLineNo">241</span>    public final long numOfReplyFromReplica;<a name="line.241"></a>
<span class="sourceLineNo">242</span><a name="line.242"></a>
<span class="sourceLineNo">243</span>    @Override<a name="line.243"></a>
<span class="sourceLineNo">244</span>    public String toString() {<a name="line.244"></a>
<span class="sourceLineNo">245</span>      return Long.toString(duration);<a name="line.245"></a>
<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
<span class="sourceLineNo">247</span><a name="line.247"></a>
<span class="sourceLineNo">248</span>    @Override<a name="line.248"></a>
<span class="sourceLineNo">249</span>    public int compareTo(RunResult o) {<a name="line.249"></a>
<span class="sourceLineNo">250</span>      return Long.compare(this.duration, o.duration);<a name="line.250"></a>
<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
<span class="sourceLineNo">253</span><a name="line.253"></a>
<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
<span class="sourceLineNo">255</span>   * Constructor<a name="line.255"></a>
<span class="sourceLineNo">256</span>   * @param conf Configuration object<a name="line.256"></a>
<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
<span class="sourceLineNo">258</span>  public PerformanceEvaluation(final Configuration conf) {<a name="line.258"></a>
<span class="sourceLineNo">259</span>    super(conf);<a name="line.259"></a>
<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
<span class="sourceLineNo">261</span><a name="line.261"></a>
<span class="sourceLineNo">262</span>  protected static void addCommandDescriptor(Class&lt;? extends TestBase&gt; cmdClass, String name,<a name="line.262"></a>
<span class="sourceLineNo">263</span>    String description) {<a name="line.263"></a>
<span class="sourceLineNo">264</span>    CmdDescriptor cmdDescriptor = new CmdDescriptor(cmdClass, name, description);<a name="line.264"></a>
<span class="sourceLineNo">265</span>    COMMANDS.put(name, cmdDescriptor);<a name="line.265"></a>
<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
<span class="sourceLineNo">267</span><a name="line.267"></a>
<span class="sourceLineNo">268</span>  /**<a name="line.268"></a>
<span class="sourceLineNo">269</span>   * Implementations can have their status set.<a name="line.269"></a>
<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
<span class="sourceLineNo">271</span>  interface Status {<a name="line.271"></a>
<span class="sourceLineNo">272</span>    /**<a name="line.272"></a>
<span class="sourceLineNo">273</span>     * Sets status<a name="line.273"></a>
<span class="sourceLineNo">274</span>     * @param msg status message<a name="line.274"></a>
<span class="sourceLineNo">275</span>     */<a name="line.275"></a>
<span class="sourceLineNo">276</span>    void setStatus(final String msg) throws IOException;<a name="line.276"></a>
<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
<span class="sourceLineNo">278</span><a name="line.278"></a>
<span class="sourceLineNo">279</span>  /**<a name="line.279"></a>
<span class="sourceLineNo">280</span>   * MapReduce job that runs a performance evaluation client in each map task.<a name="line.280"></a>
<span class="sourceLineNo">281</span>   */<a name="line.281"></a>
<span class="sourceLineNo">282</span>  public static class EvaluationMapTask<a name="line.282"></a>
<span class="sourceLineNo">283</span>    extends Mapper&lt;LongWritable, Text, LongWritable, LongWritable&gt; {<a name="line.283"></a>
<span class="sourceLineNo">284</span><a name="line.284"></a>
<span class="sourceLineNo">285</span>    /** configuration parameter name that contains the command */<a name="line.285"></a>
<span class="sourceLineNo">286</span>    public final static String CMD_KEY = "EvaluationMapTask.command";<a name="line.286"></a>
<span class="sourceLineNo">287</span>    /** configuration parameter name that contains the PE impl */<a name="line.287"></a>
<span class="sourceLineNo">288</span>    public static final String PE_KEY = "EvaluationMapTask.performanceEvalImpl";<a name="line.288"></a>
<span class="sourceLineNo">289</span><a name="line.289"></a>
<span class="sourceLineNo">290</span>    private Class&lt;? extends Test&gt; cmd;<a name="line.290"></a>
<span class="sourceLineNo">291</span><a name="line.291"></a>
<span class="sourceLineNo">292</span>    @Override<a name="line.292"></a>
<span class="sourceLineNo">293</span>    protected void setup(Context context) throws IOException, InterruptedException {<a name="line.293"></a>
<span class="sourceLineNo">294</span>      this.cmd = forName(context.getConfiguration().get(CMD_KEY), Test.class);<a name="line.294"></a>
<span class="sourceLineNo">295</span><a name="line.295"></a>
<span class="sourceLineNo">296</span>      // this is required so that extensions of PE are instantiated within the<a name="line.296"></a>
<span class="sourceLineNo">297</span>      // map reduce task...<a name="line.297"></a>
<span class="sourceLineNo">298</span>      Class&lt;? extends PerformanceEvaluation&gt; peClass =<a name="line.298"></a>
<span class="sourceLineNo">299</span>        forName(context.getConfiguration().get(PE_KEY), PerformanceEvaluation.class);<a name="line.299"></a>
<span class="sourceLineNo">300</span>      try {<a name="line.300"></a>
<span class="sourceLineNo">301</span>        peClass.getConstructor(Configuration.class).newInstance(context.getConfiguration());<a name="line.301"></a>
<span class="sourceLineNo">302</span>      } catch (Exception e) {<a name="line.302"></a>
<span class="sourceLineNo">303</span>        throw new IllegalStateException("Could not instantiate PE instance", e);<a name="line.303"></a>
<span class="sourceLineNo">304</span>      }<a name="line.304"></a>
<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
<span class="sourceLineNo">306</span><a name="line.306"></a>
<span class="sourceLineNo">307</span>    private &lt;Type&gt; Class&lt;? extends Type&gt; forName(String className, Class&lt;Type&gt; type) {<a name="line.307"></a>
<span class="sourceLineNo">308</span>      try {<a name="line.308"></a>
<span class="sourceLineNo">309</span>        return Class.forName(className).asSubclass(type);<a name="line.309"></a>
<span class="sourceLineNo">310</span>      } catch (ClassNotFoundException e) {<a name="line.310"></a>
<span class="sourceLineNo">311</span>        throw new IllegalStateException("Could not find class for name: " + className, e);<a name="line.311"></a>
<span class="sourceLineNo">312</span>      }<a name="line.312"></a>
<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
<span class="sourceLineNo">314</span><a name="line.314"></a>
<span class="sourceLineNo">315</span>    @Override<a name="line.315"></a>
<span class="sourceLineNo">316</span>    protected void map(LongWritable key, Text value, final Context context)<a name="line.316"></a>
<span class="sourceLineNo">317</span>      throws IOException, InterruptedException {<a name="line.317"></a>
<span class="sourceLineNo">318</span><a name="line.318"></a>
<span class="sourceLineNo">319</span>      Status status = new Status() {<a name="line.319"></a>
<span class="sourceLineNo">320</span>        @Override<a name="line.320"></a>
<span class="sourceLineNo">321</span>        public void setStatus(String msg) {<a name="line.321"></a>
<span class="sourceLineNo">322</span>          context.setStatus(msg);<a name="line.322"></a>
<span class="sourceLineNo">323</span>        }<a name="line.323"></a>
<span class="sourceLineNo">324</span>      };<a name="line.324"></a>
<span class="sourceLineNo">325</span><a name="line.325"></a>
<span class="sourceLineNo">326</span>      TestOptions opts = GSON.fromJson(value.toString(), TestOptions.class);<a name="line.326"></a>
<span class="sourceLineNo">327</span>      Configuration conf = HBaseConfiguration.create(context.getConfiguration());<a name="line.327"></a>
<span class="sourceLineNo">328</span>      final Connection con = ConnectionFactory.createConnection(conf);<a name="line.328"></a>
<span class="sourceLineNo">329</span>      AsyncConnection asyncCon = null;<a name="line.329"></a>
<span class="sourceLineNo">330</span>      try {<a name="line.330"></a>
<span class="sourceLineNo">331</span>        asyncCon = ConnectionFactory.createAsyncConnection(conf).get();<a name="line.331"></a>
<span class="sourceLineNo">332</span>      } catch (ExecutionException e) {<a name="line.332"></a>
<span class="sourceLineNo">333</span>        throw new IOException(e);<a name="line.333"></a>
<span class="sourceLineNo">334</span>      }<a name="line.334"></a>
<span class="sourceLineNo">335</span><a name="line.335"></a>
<span class="sourceLineNo">336</span>      // Evaluation task<a name="line.336"></a>
<span class="sourceLineNo">337</span>      RunResult result =<a name="line.337"></a>
<span class="sourceLineNo">338</span>        PerformanceEvaluation.runOneClient(this.cmd, conf, con, asyncCon, opts, status);<a name="line.338"></a>
<span class="sourceLineNo">339</span>      // Collect how much time the thing took. Report as map output and<a name="line.339"></a>
<span class="sourceLineNo">340</span>      // to the ELAPSED_TIME counter.<a name="line.340"></a>
<span class="sourceLineNo">341</span>      context.getCounter(Counter.ELAPSED_TIME).increment(result.duration);<a name="line.341"></a>
<span class="sourceLineNo">342</span>      context.getCounter(Counter.ROWS).increment(opts.perClientRunRows);<a name="line.342"></a>
<span class="sourceLineNo">343</span>      context.write(new LongWritable(opts.startRow), new LongWritable(result.duration));<a name="line.343"></a>
<span class="sourceLineNo">344</span>      context.progress();<a name="line.344"></a>
<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
<span class="sourceLineNo">347</span><a name="line.347"></a>
<span class="sourceLineNo">348</span>  /*<a name="line.348"></a>
<span class="sourceLineNo">349</span>   * If table does not already exist, create. Also create a table when {@code opts.presplitRegions}<a name="line.349"></a>
<span class="sourceLineNo">350</span>   * is specified or when the existing table's region replica count doesn't match {@code<a name="line.350"></a>
<span class="sourceLineNo">351</span>   * opts.replicas}.<a name="line.351"></a>
<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
<span class="sourceLineNo">353</span>  static boolean checkTable(Admin admin, TestOptions opts) throws IOException {<a name="line.353"></a>
<span class="sourceLineNo">354</span>    TableName tableName = TableName.valueOf(opts.tableName);<a name="line.354"></a>
<span class="sourceLineNo">355</span>    boolean needsDelete = false, exists = admin.tableExists(tableName);<a name="line.355"></a>
<span class="sourceLineNo">356</span>    boolean isReadCmd = opts.cmdName.toLowerCase(Locale.ROOT).contains("read")<a name="line.356"></a>
<span class="sourceLineNo">357</span>      || opts.cmdName.toLowerCase(Locale.ROOT).contains("scan");<a name="line.357"></a>
<span class="sourceLineNo">358</span>    boolean isDeleteCmd = opts.cmdName.toLowerCase(Locale.ROOT).contains("delete");<a name="line.358"></a>
<span class="sourceLineNo">359</span>    if (!exists &amp;&amp; (isReadCmd || isDeleteCmd)) {<a name="line.359"></a>
<span class="sourceLineNo">360</span>      throw new IllegalStateException(<a name="line.360"></a>
<span class="sourceLineNo">361</span>        "Must specify an existing table for read commands. Run a write command first.");<a name="line.361"></a>
<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
<span class="sourceLineNo">363</span>    TableDescriptor desc = exists ? admin.getDescriptor(TableName.valueOf(opts.tableName)) : null;<a name="line.363"></a>
<span class="sourceLineNo">364</span>    byte[][] splits = getSplits(opts);<a name="line.364"></a>
<span class="sourceLineNo">365</span><a name="line.365"></a>
<span class="sourceLineNo">366</span>    // recreate the table when user has requested presplit or when existing<a name="line.366"></a>
<span class="sourceLineNo">367</span>    // {RegionSplitPolicy,replica count} does not match requested, or when the<a name="line.367"></a>
<span class="sourceLineNo">368</span>    // number of column families does not match requested.<a name="line.368"></a>
<span class="sourceLineNo">369</span>    if (<a name="line.369"></a>
<span class="sourceLineNo">370</span>      (exists &amp;&amp; opts.presplitRegions != DEFAULT_OPTS.presplitRegions<a name="line.370"></a>
<span class="sourceLineNo">371</span>        &amp;&amp; opts.presplitRegions != admin.getRegions(tableName).size())<a name="line.371"></a>
<span class="sourceLineNo">372</span>        || (!isReadCmd &amp;&amp; desc != null<a name="line.372"></a>
<span class="sourceLineNo">373</span>          &amp;&amp; !StringUtils.equals(desc.getRegionSplitPolicyClassName(), opts.splitPolicy))<a name="line.373"></a>
<span class="sourceLineNo">374</span>        || (!(isReadCmd || isDeleteCmd) &amp;&amp; desc != null<a name="line.374"></a>
<span class="sourceLineNo">375</span>          &amp;&amp; desc.getRegionReplication() != opts.replicas)<a name="line.375"></a>
<span class="sourceLineNo">376</span>        || (desc != null &amp;&amp; desc.getColumnFamilyCount() != opts.families)<a name="line.376"></a>
<span class="sourceLineNo">377</span>    ) {<a name="line.377"></a>
<span class="sourceLineNo">378</span>      needsDelete = true;<a name="line.378"></a>
<span class="sourceLineNo">379</span>      // wait, why did it delete my table?!?<a name="line.379"></a>
<span class="sourceLineNo">380</span>      LOG.debug(MoreObjects.toStringHelper("needsDelete").add("needsDelete", needsDelete)<a name="line.380"></a>
<span class="sourceLineNo">381</span>        .add("isReadCmd", isReadCmd).add("exists", exists).add("desc", desc)<a name="line.381"></a>
<span class="sourceLineNo">382</span>        .add("presplit", opts.presplitRegions).add("splitPolicy", opts.splitPolicy)<a name="line.382"></a>
<span class="sourceLineNo">383</span>        .add("replicas", opts.replicas).add("families", opts.families).toString());<a name="line.383"></a>
<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
<span class="sourceLineNo">385</span><a name="line.385"></a>
<span class="sourceLineNo">386</span>    // remove an existing table<a name="line.386"></a>
<span class="sourceLineNo">387</span>    if (needsDelete) {<a name="line.387"></a>
<span class="sourceLineNo">388</span>      if (admin.isTableEnabled(tableName)) {<a name="line.388"></a>
<span class="sourceLineNo">389</span>        admin.disableTable(tableName);<a name="line.389"></a>
<span class="sourceLineNo">390</span>      }<a name="line.390"></a>
<span class="sourceLineNo">391</span>      admin.deleteTable(tableName);<a name="line.391"></a>
<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
<span class="sourceLineNo">393</span><a name="line.393"></a>
<span class="sourceLineNo">394</span>    // table creation is necessary<a name="line.394"></a>
<span class="sourceLineNo">395</span>    if (!exists || needsDelete) {<a name="line.395"></a>
<span class="sourceLineNo">396</span>      desc = getTableDescriptor(opts);<a name="line.396"></a>
<span class="sourceLineNo">397</span>      if (splits != null) {<a name="line.397"></a>
<span class="sourceLineNo">398</span>        if (LOG.isDebugEnabled()) {<a name="line.398"></a>
<span class="sourceLineNo">399</span>          for (int i = 0; i &lt; splits.length; i++) {<a name="line.399"></a>
<span class="sourceLineNo">400</span>            LOG.debug(" split " + i + ": " + Bytes.toStringBinary(splits[i]));<a name="line.400"></a>
<span class="sourceLineNo">401</span>          }<a name="line.401"></a>
<span class="sourceLineNo">402</span>        }<a name="line.402"></a>
<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
<span class="sourceLineNo">404</span>      if (splits != null) {<a name="line.404"></a>
<span class="sourceLineNo">405</span>        admin.createTable(desc, splits);<a name="line.405"></a>
<span class="sourceLineNo">406</span>      } else {<a name="line.406"></a>
<span class="sourceLineNo">407</span>        admin.createTable(desc);<a name="line.407"></a>
<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
<span class="sourceLineNo">409</span>      LOG.info("Table " + desc + " created");<a name="line.409"></a>
<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
<span class="sourceLineNo">411</span>    return admin.tableExists(tableName);<a name="line.411"></a>
<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
<span class="sourceLineNo">413</span><a name="line.413"></a>
<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
<span class="sourceLineNo">415</span>   * Create an HTableDescriptor from provided TestOptions.<a name="line.415"></a>
<span class="sourceLineNo">416</span>   */<a name="line.416"></a>
<span class="sourceLineNo">417</span>  protected static TableDescriptor getTableDescriptor(TestOptions opts) {<a name="line.417"></a>
<span class="sourceLineNo">418</span>    TableDescriptorBuilder builder =<a name="line.418"></a>
<span class="sourceLineNo">419</span>      TableDescriptorBuilder.newBuilder(TableName.valueOf(opts.tableName));<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
<span class="sourceLineNo">421</span>    for (int family = 0; family &lt; opts.families; family++) {<a name="line.421"></a>
<span class="sourceLineNo">422</span>      byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.422"></a>
<span class="sourceLineNo">423</span>      ColumnFamilyDescriptorBuilder cfBuilder =<a name="line.423"></a>
<span class="sourceLineNo">424</span>        ColumnFamilyDescriptorBuilder.newBuilder(familyName);<a name="line.424"></a>
<span class="sourceLineNo">425</span>      cfBuilder.setDataBlockEncoding(opts.blockEncoding);<a name="line.425"></a>
<span class="sourceLineNo">426</span>      cfBuilder.setCompressionType(opts.compression);<a name="line.426"></a>
<span class="sourceLineNo">427</span>      cfBuilder.setEncryptionType(opts.encryption);<a name="line.427"></a>
<span class="sourceLineNo">428</span>      cfBuilder.setBloomFilterType(opts.bloomType);<a name="line.428"></a>
<span class="sourceLineNo">429</span>      cfBuilder.setBlocksize(opts.blockSize);<a name="line.429"></a>
<span class="sourceLineNo">430</span>      if (opts.inMemoryCF) {<a name="line.430"></a>
<span class="sourceLineNo">431</span>        cfBuilder.setInMemory(true);<a name="line.431"></a>
<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
<span class="sourceLineNo">433</span>      cfBuilder.setInMemoryCompaction(opts.inMemoryCompaction);<a name="line.433"></a>
<span class="sourceLineNo">434</span>      builder.setColumnFamily(cfBuilder.build());<a name="line.434"></a>
<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
<span class="sourceLineNo">436</span>    if (opts.replicas != DEFAULT_OPTS.replicas) {<a name="line.436"></a>
<span class="sourceLineNo">437</span>      builder.setRegionReplication(opts.replicas);<a name="line.437"></a>
<span class="sourceLineNo">438</span>    }<a name="line.438"></a>
<span class="sourceLineNo">439</span>    if (opts.splitPolicy != null &amp;&amp; !opts.splitPolicy.equals(DEFAULT_OPTS.splitPolicy)) {<a name="line.439"></a>
<span class="sourceLineNo">440</span>      builder.setRegionSplitPolicyClassName(opts.splitPolicy);<a name="line.440"></a>
<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
<span class="sourceLineNo">442</span>    return builder.build();<a name="line.442"></a>
<span class="sourceLineNo">443</span>  }<a name="line.443"></a>
<span class="sourceLineNo">444</span><a name="line.444"></a>
<span class="sourceLineNo">445</span>  /**<a name="line.445"></a>
<span class="sourceLineNo">446</span>   * generates splits based on total number of rows and specified split regions<a name="line.446"></a>
<span class="sourceLineNo">447</span>   */<a name="line.447"></a>
<span class="sourceLineNo">448</span>  protected static byte[][] getSplits(TestOptions opts) {<a name="line.448"></a>
<span class="sourceLineNo">449</span>    if (opts.presplitRegions == DEFAULT_OPTS.presplitRegions) return null;<a name="line.449"></a>
<span class="sourceLineNo">450</span><a name="line.450"></a>
<span class="sourceLineNo">451</span>    int numSplitPoints = opts.presplitRegions - 1;<a name="line.451"></a>
<span class="sourceLineNo">452</span>    byte[][] splits = new byte[numSplitPoints][];<a name="line.452"></a>
<span class="sourceLineNo">453</span>    int jump = opts.totalRows / opts.presplitRegions;<a name="line.453"></a>
<span class="sourceLineNo">454</span>    for (int i = 0; i &lt; numSplitPoints; i++) {<a name="line.454"></a>
<span class="sourceLineNo">455</span>      int rowkey = jump * (1 + i);<a name="line.455"></a>
<span class="sourceLineNo">456</span>      splits[i] = format(rowkey);<a name="line.456"></a>
<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
<span class="sourceLineNo">458</span>    return splits;<a name="line.458"></a>
<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
<span class="sourceLineNo">460</span><a name="line.460"></a>
<span class="sourceLineNo">461</span>  static void setupConnectionCount(final TestOptions opts) {<a name="line.461"></a>
<span class="sourceLineNo">462</span>    if (opts.oneCon) {<a name="line.462"></a>
<span class="sourceLineNo">463</span>      opts.connCount = 1;<a name="line.463"></a>
<span class="sourceLineNo">464</span>    } else {<a name="line.464"></a>
<span class="sourceLineNo">465</span>      if (opts.connCount == -1) {<a name="line.465"></a>
<span class="sourceLineNo">466</span>        // set to thread number if connCount is not set<a name="line.466"></a>
<span class="sourceLineNo">467</span>        opts.connCount = opts.numClientThreads;<a name="line.467"></a>
<span class="sourceLineNo">468</span>      }<a name="line.468"></a>
<span class="sourceLineNo">469</span>    }<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>   * Run all clients in this vm each to its own thread.<a name="line.473"></a>
<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
<span class="sourceLineNo">475</span>  static RunResult[] doLocalClients(final TestOptions opts, final Configuration conf)<a name="line.475"></a>
<span class="sourceLineNo">476</span>    throws IOException, InterruptedException, ExecutionException {<a name="line.476"></a>
<span class="sourceLineNo">477</span>    final Class&lt;? extends TestBase&gt; cmd = determineCommandClass(opts.cmdName);<a name="line.477"></a>
<span class="sourceLineNo">478</span>    assert cmd != null;<a name="line.478"></a>
<span class="sourceLineNo">479</span>    @SuppressWarnings("unchecked")<a name="line.479"></a>
<span class="sourceLineNo">480</span>    Future&lt;RunResult&gt;[] threads = new Future[opts.numClientThreads];<a name="line.480"></a>
<span class="sourceLineNo">481</span>    RunResult[] results = new RunResult[opts.numClientThreads];<a name="line.481"></a>
<span class="sourceLineNo">482</span>    ExecutorService pool = Executors.newFixedThreadPool(opts.numClientThreads,<a name="line.482"></a>
<span class="sourceLineNo">483</span>      new ThreadFactoryBuilder().setNameFormat("TestClient-%s").build());<a name="line.483"></a>
<span class="sourceLineNo">484</span>    setupConnectionCount(opts);<a name="line.484"></a>
<span class="sourceLineNo">485</span>    final Connection[] cons = new Connection[opts.connCount];<a name="line.485"></a>
<span class="sourceLineNo">486</span>    final AsyncConnection[] asyncCons = new AsyncConnection[opts.connCount];<a name="line.486"></a>
<span class="sourceLineNo">487</span>    for (int i = 0; i &lt; opts.connCount; i++) {<a name="line.487"></a>
<span class="sourceLineNo">488</span>      cons[i] = ConnectionFactory.createConnection(conf);<a name="line.488"></a>
<span class="sourceLineNo">489</span>      asyncCons[i] = ConnectionFactory.createAsyncConnection(conf).get();<a name="line.489"></a>
<span class="sourceLineNo">490</span>    }<a name="line.490"></a>
<span class="sourceLineNo">491</span>    LOG<a name="line.491"></a>
<span class="sourceLineNo">492</span>      .info("Created " + opts.connCount + " connections for " + opts.numClientThreads + " threads");<a name="line.492"></a>
<span class="sourceLineNo">493</span>    for (int i = 0; i &lt; threads.length; i++) {<a name="line.493"></a>
<span class="sourceLineNo">494</span>      final int index = i;<a name="line.494"></a>
<span class="sourceLineNo">495</span>      threads[i] = pool.submit(new Callable&lt;RunResult&gt;() {<a name="line.495"></a>
<span class="sourceLineNo">496</span>        @Override<a name="line.496"></a>
<span class="sourceLineNo">497</span>        public RunResult call() throws Exception {<a name="line.497"></a>
<span class="sourceLineNo">498</span>          TestOptions threadOpts = new TestOptions(opts);<a name="line.498"></a>
<span class="sourceLineNo">499</span>          final Connection con = cons[index % cons.length];<a name="line.499"></a>
<span class="sourceLineNo">500</span>          final AsyncConnection asyncCon = asyncCons[index % asyncCons.length];<a name="line.500"></a>
<span class="sourceLineNo">501</span>          if (threadOpts.startRow == 0) threadOpts.startRow = index * threadOpts.perClientRunRows;<a name="line.501"></a>
<span class="sourceLineNo">502</span>          RunResult run = runOneClient(cmd, conf, con, asyncCon, threadOpts, new Status() {<a name="line.502"></a>
<span class="sourceLineNo">503</span>            @Override<a name="line.503"></a>
<span class="sourceLineNo">504</span>            public void setStatus(final String msg) throws IOException {<a name="line.504"></a>
<span class="sourceLineNo">505</span>              LOG.info(msg);<a name="line.505"></a>
<span class="sourceLineNo">506</span>            }<a name="line.506"></a>
<span class="sourceLineNo">507</span>          });<a name="line.507"></a>
<span class="sourceLineNo">508</span>          LOG.info("Finished " + Thread.currentThread().getName() + " in " + run.duration<a name="line.508"></a>
<span class="sourceLineNo">509</span>            + "ms over " + threadOpts.perClientRunRows + " rows");<a name="line.509"></a>
<span class="sourceLineNo">510</span>          if (opts.latencyThreshold &gt; 0) {<a name="line.510"></a>
<span class="sourceLineNo">511</span>            LOG.info("Number of replies over latency threshold " + opts.latencyThreshold<a name="line.511"></a>
<span class="sourceLineNo">512</span>              + "(ms) is " + run.numbOfReplyOverThreshold);<a name="line.512"></a>
<span class="sourceLineNo">513</span>          }<a name="line.513"></a>
<span class="sourceLineNo">514</span>          return run;<a name="line.514"></a>
<span class="sourceLineNo">515</span>        }<a name="line.515"></a>
<span class="sourceLineNo">516</span>      });<a name="line.516"></a>
<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
<span class="sourceLineNo">518</span>    pool.shutdown();<a name="line.518"></a>
<span class="sourceLineNo">519</span><a name="line.519"></a>
<span class="sourceLineNo">520</span>    for (int i = 0; i &lt; threads.length; i++) {<a name="line.520"></a>
<span class="sourceLineNo">521</span>      try {<a name="line.521"></a>
<span class="sourceLineNo">522</span>        results[i] = threads[i].get();<a name="line.522"></a>
<span class="sourceLineNo">523</span>      } catch (ExecutionException e) {<a name="line.523"></a>
<span class="sourceLineNo">524</span>        throw new IOException(e.getCause());<a name="line.524"></a>
<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
<span class="sourceLineNo">527</span>    final String test = cmd.getSimpleName();<a name="line.527"></a>
<span class="sourceLineNo">528</span>    LOG.info("[" + test + "] Summary of timings (ms): " + Arrays.toString(results));<a name="line.528"></a>
<span class="sourceLineNo">529</span>    Arrays.sort(results);<a name="line.529"></a>
<span class="sourceLineNo">530</span>    long total = 0;<a name="line.530"></a>
<span class="sourceLineNo">531</span>    float avgLatency = 0;<a name="line.531"></a>
<span class="sourceLineNo">532</span>    float avgTPS = 0;<a name="line.532"></a>
<span class="sourceLineNo">533</span>    long replicaWins = 0;<a name="line.533"></a>
<span class="sourceLineNo">534</span>    for (RunResult result : results) {<a name="line.534"></a>
<span class="sourceLineNo">535</span>      total += result.duration;<a name="line.535"></a>
<span class="sourceLineNo">536</span>      avgLatency += result.hist.getSnapshot().getMean();<a name="line.536"></a>
<span class="sourceLineNo">537</span>      avgTPS += opts.perClientRunRows * 1.0f / result.duration;<a name="line.537"></a>
<span class="sourceLineNo">538</span>      replicaWins += result.numOfReplyFromReplica;<a name="line.538"></a>
<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
<span class="sourceLineNo">540</span>    avgTPS *= 1000; // ms to second<a name="line.540"></a>
<span class="sourceLineNo">541</span>    avgLatency = avgLatency / results.length;<a name="line.541"></a>
<span class="sourceLineNo">542</span>    LOG.info("[" + test + " duration ]" + "\tMin: " + results[0] + "ms" + "\tMax: "<a name="line.542"></a>
<span class="sourceLineNo">543</span>      + results[results.length - 1] + "ms" + "\tAvg: " + (total / results.length) + "ms");<a name="line.543"></a>
<span class="sourceLineNo">544</span>    LOG.info("[ Avg latency (us)]\t" + Math.round(avgLatency));<a name="line.544"></a>
<span class="sourceLineNo">545</span>    LOG.info("[ Avg TPS/QPS]\t" + Math.round(avgTPS) + "\t row per second");<a name="line.545"></a>
<span class="sourceLineNo">546</span>    if (opts.replicas &gt; 1) {<a name="line.546"></a>
<span class="sourceLineNo">547</span>      LOG.info("[results from replica regions] " + replicaWins);<a name="line.547"></a>
<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
<span class="sourceLineNo">549</span><a name="line.549"></a>
<span class="sourceLineNo">550</span>    for (int i = 0; i &lt; opts.connCount; i++) {<a name="line.550"></a>
<span class="sourceLineNo">551</span>      cons[i].close();<a name="line.551"></a>
<span class="sourceLineNo">552</span>      asyncCons[i].close();<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>    return results;<a name="line.555"></a>
<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
<span class="sourceLineNo">557</span><a name="line.557"></a>
<span class="sourceLineNo">558</span>  /*<a name="line.558"></a>
<span class="sourceLineNo">559</span>   * Run a mapreduce job. Run as many maps as asked-for clients. Before we start up the job, write<a name="line.559"></a>
<span class="sourceLineNo">560</span>   * out an input file with instruction per client regards which row they are to start on.<a name="line.560"></a>
<span class="sourceLineNo">561</span>   * @param cmd Command to run.<a name="line.561"></a>
<span class="sourceLineNo">562</span>   */<a name="line.562"></a>
<span class="sourceLineNo">563</span>  static Job doMapReduce(TestOptions opts, final Configuration conf)<a name="line.563"></a>
<span class="sourceLineNo">564</span>    throws IOException, InterruptedException, ClassNotFoundException {<a name="line.564"></a>
<span class="sourceLineNo">565</span>    final Class&lt;? extends TestBase&gt; cmd = determineCommandClass(opts.cmdName);<a name="line.565"></a>
<span class="sourceLineNo">566</span>    assert cmd != null;<a name="line.566"></a>
<span class="sourceLineNo">567</span>    Path inputDir = writeInputFile(conf, opts);<a name="line.567"></a>
<span class="sourceLineNo">568</span>    conf.set(EvaluationMapTask.CMD_KEY, cmd.getName());<a name="line.568"></a>
<span class="sourceLineNo">569</span>    conf.set(EvaluationMapTask.PE_KEY, PerformanceEvaluation.class.getName());<a name="line.569"></a>
<span class="sourceLineNo">570</span>    Job job = Job.getInstance(conf);<a name="line.570"></a>
<span class="sourceLineNo">571</span>    job.setJarByClass(PerformanceEvaluation.class);<a name="line.571"></a>
<span class="sourceLineNo">572</span>    job.setJobName("HBase Performance Evaluation - " + opts.cmdName);<a name="line.572"></a>
<span class="sourceLineNo">573</span><a name="line.573"></a>
<span class="sourceLineNo">574</span>    job.setInputFormatClass(NLineInputFormat.class);<a name="line.574"></a>
<span class="sourceLineNo">575</span>    NLineInputFormat.setInputPaths(job, inputDir);<a name="line.575"></a>
<span class="sourceLineNo">576</span>    // this is default, but be explicit about it just in case.<a name="line.576"></a>
<span class="sourceLineNo">577</span>    NLineInputFormat.setNumLinesPerSplit(job, 1);<a name="line.577"></a>
<span class="sourceLineNo">578</span><a name="line.578"></a>
<span class="sourceLineNo">579</span>    job.setOutputKeyClass(LongWritable.class);<a name="line.579"></a>
<span class="sourceLineNo">580</span>    job.setOutputValueClass(LongWritable.class);<a name="line.580"></a>
<span class="sourceLineNo">581</span><a name="line.581"></a>
<span class="sourceLineNo">582</span>    job.setMapperClass(EvaluationMapTask.class);<a name="line.582"></a>
<span class="sourceLineNo">583</span>    job.setReducerClass(LongSumReducer.class);<a name="line.583"></a>
<span class="sourceLineNo">584</span><a name="line.584"></a>
<span class="sourceLineNo">585</span>    job.setNumReduceTasks(1);<a name="line.585"></a>
<span class="sourceLineNo">586</span><a name="line.586"></a>
<span class="sourceLineNo">587</span>    job.setOutputFormatClass(TextOutputFormat.class);<a name="line.587"></a>
<span class="sourceLineNo">588</span>    TextOutputFormat.setOutputPath(job, new Path(inputDir.getParent(), "outputs"));<a name="line.588"></a>
<span class="sourceLineNo">589</span><a name="line.589"></a>
<span class="sourceLineNo">590</span>    TableMapReduceUtil.addDependencyJars(job);<a name="line.590"></a>
<span class="sourceLineNo">591</span>    TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(), Histogram.class, // yammer<a name="line.591"></a>
<span class="sourceLineNo">592</span>                                                                                            // metrics<a name="line.592"></a>
<span class="sourceLineNo">593</span>      Gson.class, // gson<a name="line.593"></a>
<span class="sourceLineNo">594</span>      FilterAllFilter.class // hbase-server tests jar<a name="line.594"></a>
<span class="sourceLineNo">595</span>    );<a name="line.595"></a>
<span class="sourceLineNo">596</span><a name="line.596"></a>
<span class="sourceLineNo">597</span>    TableMapReduceUtil.initCredentials(job);<a name="line.597"></a>
<span class="sourceLineNo">598</span><a name="line.598"></a>
<span class="sourceLineNo">599</span>    job.waitForCompletion(true);<a name="line.599"></a>
<span class="sourceLineNo">600</span>    return job;<a name="line.600"></a>
<span class="sourceLineNo">601</span>  }<a name="line.601"></a>
<span class="sourceLineNo">602</span><a name="line.602"></a>
<span class="sourceLineNo">603</span>  /**<a name="line.603"></a>
<span class="sourceLineNo">604</span>   * Each client has one mapper to do the work, and client do the resulting count in a map task.<a name="line.604"></a>
<span class="sourceLineNo">605</span>   */<a name="line.605"></a>
<span class="sourceLineNo">606</span><a name="line.606"></a>
<span class="sourceLineNo">607</span>  static String JOB_INPUT_FILENAME = "input.txt";<a name="line.607"></a>
<span class="sourceLineNo">608</span><a name="line.608"></a>
<span class="sourceLineNo">609</span>  /*<a name="line.609"></a>
<span class="sourceLineNo">610</span>   * Write input file of offsets-per-client for the mapreduce job.<a name="line.610"></a>
<span class="sourceLineNo">611</span>   * @param c Configuration<a name="line.611"></a>
<span class="sourceLineNo">612</span>   * @return Directory that contains file written whose name is JOB_INPUT_FILENAME<a name="line.612"></a>
<span class="sourceLineNo">613</span>   */<a name="line.613"></a>
<span class="sourceLineNo">614</span>  static Path writeInputFile(final Configuration c, final TestOptions opts) throws IOException {<a name="line.614"></a>
<span class="sourceLineNo">615</span>    return writeInputFile(c, opts, new Path("."));<a name="line.615"></a>
<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
<span class="sourceLineNo">617</span><a name="line.617"></a>
<span class="sourceLineNo">618</span>  static Path writeInputFile(final Configuration c, final TestOptions opts, final Path basedir)<a name="line.618"></a>
<span class="sourceLineNo">619</span>    throws IOException {<a name="line.619"></a>
<span class="sourceLineNo">620</span>    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");<a name="line.620"></a>
<span class="sourceLineNo">621</span>    Path jobdir = new Path(new Path(basedir, PERF_EVAL_DIR), formatter.format(new Date()));<a name="line.621"></a>
<span class="sourceLineNo">622</span>    Path inputDir = new Path(jobdir, "inputs");<a name="line.622"></a>
<span class="sourceLineNo">623</span><a name="line.623"></a>
<span class="sourceLineNo">624</span>    FileSystem fs = FileSystem.get(c);<a name="line.624"></a>
<span class="sourceLineNo">625</span>    fs.mkdirs(inputDir);<a name="line.625"></a>
<span class="sourceLineNo">626</span><a name="line.626"></a>
<span class="sourceLineNo">627</span>    Path inputFile = new Path(inputDir, JOB_INPUT_FILENAME);<a name="line.627"></a>
<span class="sourceLineNo">628</span>    PrintStream out = new PrintStream(fs.create(inputFile));<a name="line.628"></a>
<span class="sourceLineNo">629</span>    // Make input random.<a name="line.629"></a>
<span class="sourceLineNo">630</span>    Map&lt;Integer, String&gt; m = new TreeMap&lt;&gt;();<a name="line.630"></a>
<span class="sourceLineNo">631</span>    Hash h = MurmurHash.getInstance();<a name="line.631"></a>
<span class="sourceLineNo">632</span>    int perClientRows = (opts.totalRows / opts.numClientThreads);<a name="line.632"></a>
<span class="sourceLineNo">633</span>    try {<a name="line.633"></a>
<span class="sourceLineNo">634</span>      for (int j = 0; j &lt; opts.numClientThreads; j++) {<a name="line.634"></a>
<span class="sourceLineNo">635</span>        TestOptions next = new TestOptions(opts);<a name="line.635"></a>
<span class="sourceLineNo">636</span>        next.startRow = j * perClientRows;<a name="line.636"></a>
<span class="sourceLineNo">637</span>        next.perClientRunRows = perClientRows;<a name="line.637"></a>
<span class="sourceLineNo">638</span>        String s = GSON.toJson(next);<a name="line.638"></a>
<span class="sourceLineNo">639</span>        LOG.info("Client=" + j + ", input=" + s);<a name="line.639"></a>
<span class="sourceLineNo">640</span>        byte[] b = Bytes.toBytes(s);<a name="line.640"></a>
<span class="sourceLineNo">641</span>        int hash = h.hash(new ByteArrayHashKey(b, 0, b.length), -1);<a name="line.641"></a>
<span class="sourceLineNo">642</span>        m.put(hash, s);<a name="line.642"></a>
<span class="sourceLineNo">643</span>      }<a name="line.643"></a>
<span class="sourceLineNo">644</span>      for (Map.Entry&lt;Integer, String&gt; e : m.entrySet()) {<a name="line.644"></a>
<span class="sourceLineNo">645</span>        out.println(e.getValue());<a name="line.645"></a>
<span class="sourceLineNo">646</span>      }<a name="line.646"></a>
<span class="sourceLineNo">647</span>    } finally {<a name="line.647"></a>
<span class="sourceLineNo">648</span>      out.close();<a name="line.648"></a>
<span class="sourceLineNo">649</span>    }<a name="line.649"></a>
<span class="sourceLineNo">650</span>    return inputDir;<a name="line.650"></a>
<span class="sourceLineNo">651</span>  }<a name="line.651"></a>
<span class="sourceLineNo">652</span><a name="line.652"></a>
<span class="sourceLineNo">653</span>  /**<a name="line.653"></a>
<span class="sourceLineNo">654</span>   * Describes a command.<a name="line.654"></a>
<span class="sourceLineNo">655</span>   */<a name="line.655"></a>
<span class="sourceLineNo">656</span>  static class CmdDescriptor {<a name="line.656"></a>
<span class="sourceLineNo">657</span>    private Class&lt;? extends TestBase&gt; cmdClass;<a name="line.657"></a>
<span class="sourceLineNo">658</span>    private String name;<a name="line.658"></a>
<span class="sourceLineNo">659</span>    private String description;<a name="line.659"></a>
<span class="sourceLineNo">660</span><a name="line.660"></a>
<span class="sourceLineNo">661</span>    CmdDescriptor(Class&lt;? extends TestBase&gt; cmdClass, String name, String description) {<a name="line.661"></a>
<span class="sourceLineNo">662</span>      this.cmdClass = cmdClass;<a name="line.662"></a>
<span class="sourceLineNo">663</span>      this.name = name;<a name="line.663"></a>
<span class="sourceLineNo">664</span>      this.description = description;<a name="line.664"></a>
<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
<span class="sourceLineNo">666</span><a name="line.666"></a>
<span class="sourceLineNo">667</span>    public Class&lt;? extends TestBase&gt; getCmdClass() {<a name="line.667"></a>
<span class="sourceLineNo">668</span>      return cmdClass;<a name="line.668"></a>
<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
<span class="sourceLineNo">670</span><a name="line.670"></a>
<span class="sourceLineNo">671</span>    public String getName() {<a name="line.671"></a>
<span class="sourceLineNo">672</span>      return name;<a name="line.672"></a>
<span class="sourceLineNo">673</span>    }<a name="line.673"></a>
<span class="sourceLineNo">674</span><a name="line.674"></a>
<span class="sourceLineNo">675</span>    public String getDescription() {<a name="line.675"></a>
<span class="sourceLineNo">676</span>      return description;<a name="line.676"></a>
<span class="sourceLineNo">677</span>    }<a name="line.677"></a>
<span class="sourceLineNo">678</span>  }<a name="line.678"></a>
<span class="sourceLineNo">679</span><a name="line.679"></a>
<span class="sourceLineNo">680</span>  /**<a name="line.680"></a>
<span class="sourceLineNo">681</span>   * Wraps up options passed to {@link org.apache.hadoop.hbase.PerformanceEvaluation}. This makes<a name="line.681"></a>
<span class="sourceLineNo">682</span>   * tracking all these arguments a little easier. NOTE: ADDING AN OPTION, you need to add a data<a name="line.682"></a>
<span class="sourceLineNo">683</span>   * member, a getter/setter (to make JSON serialization of this TestOptions class behave), and you<a name="line.683"></a>
<span class="sourceLineNo">684</span>   * need to add to the clone constructor below copying your new option from the 'that' to the<a name="line.684"></a>
<span class="sourceLineNo">685</span>   * 'this'. Look for 'clone' below.<a name="line.685"></a>
<span class="sourceLineNo">686</span>   */<a name="line.686"></a>
<span class="sourceLineNo">687</span>  static class TestOptions {<a name="line.687"></a>
<span class="sourceLineNo">688</span>    String cmdName = null;<a name="line.688"></a>
<span class="sourceLineNo">689</span>    boolean nomapred = false;<a name="line.689"></a>
<span class="sourceLineNo">690</span>    boolean filterAll = false;<a name="line.690"></a>
<span class="sourceLineNo">691</span>    int startRow = 0;<a name="line.691"></a>
<span class="sourceLineNo">692</span>    float size = 1.0f;<a name="line.692"></a>
<span class="sourceLineNo">693</span>    int perClientRunRows = DEFAULT_ROWS_PER_GB;<a name="line.693"></a>
<span class="sourceLineNo">694</span>    int numClientThreads = 1;<a name="line.694"></a>
<span class="sourceLineNo">695</span>    int totalRows = DEFAULT_ROWS_PER_GB;<a name="line.695"></a>
<span class="sourceLineNo">696</span>    int measureAfter = 0;<a name="line.696"></a>
<span class="sourceLineNo">697</span>    float sampleRate = 1.0f;<a name="line.697"></a>
<span class="sourceLineNo">698</span>    /**<a name="line.698"></a>
<span class="sourceLineNo">699</span>     * @deprecated Useless after switching to OpenTelemetry<a name="line.699"></a>
<span class="sourceLineNo">700</span>     */<a name="line.700"></a>
<span class="sourceLineNo">701</span>    @Deprecated<a name="line.701"></a>
<span class="sourceLineNo">702</span>    double traceRate = 0.0;<a name="line.702"></a>
<span class="sourceLineNo">703</span>    String tableName = TABLE_NAME;<a name="line.703"></a>
<span class="sourceLineNo">704</span>    boolean flushCommits = true;<a name="line.704"></a>
<span class="sourceLineNo">705</span>    boolean writeToWAL = true;<a name="line.705"></a>
<span class="sourceLineNo">706</span>    boolean autoFlush = false;<a name="line.706"></a>
<span class="sourceLineNo">707</span>    boolean oneCon = false;<a name="line.707"></a>
<span class="sourceLineNo">708</span>    int connCount = -1; // wil decide the actual num later<a name="line.708"></a>
<span class="sourceLineNo">709</span>    boolean useTags = false;<a name="line.709"></a>
<span class="sourceLineNo">710</span>    int noOfTags = 1;<a name="line.710"></a>
<span class="sourceLineNo">711</span>    boolean reportLatency = false;<a name="line.711"></a>
<span class="sourceLineNo">712</span>    int multiGet = 0;<a name="line.712"></a>
<span class="sourceLineNo">713</span>    int multiPut = 0;<a name="line.713"></a>
<span class="sourceLineNo">714</span>    int randomSleep = 0;<a name="line.714"></a>
<span class="sourceLineNo">715</span>    boolean inMemoryCF = false;<a name="line.715"></a>
<span class="sourceLineNo">716</span>    int presplitRegions = 0;<a name="line.716"></a>
<span class="sourceLineNo">717</span>    int replicas = TableDescriptorBuilder.DEFAULT_REGION_REPLICATION;<a name="line.717"></a>
<span class="sourceLineNo">718</span>    String splitPolicy = null;<a name="line.718"></a>
<span class="sourceLineNo">719</span>    Compression.Algorithm compression = Compression.Algorithm.NONE;<a name="line.719"></a>
<span class="sourceLineNo">720</span>    String encryption = null;<a name="line.720"></a>
<span class="sourceLineNo">721</span>    BloomType bloomType = BloomType.ROW;<a name="line.721"></a>
<span class="sourceLineNo">722</span>    int blockSize = HConstants.DEFAULT_BLOCKSIZE;<a name="line.722"></a>
<span class="sourceLineNo">723</span>    DataBlockEncoding blockEncoding = DataBlockEncoding.NONE;<a name="line.723"></a>
<span class="sourceLineNo">724</span>    boolean valueRandom = false;<a name="line.724"></a>
<span class="sourceLineNo">725</span>    boolean valueZipf = false;<a name="line.725"></a>
<span class="sourceLineNo">726</span>    int valueSize = DEFAULT_VALUE_LENGTH;<a name="line.726"></a>
<span class="sourceLineNo">727</span>    int period = (this.perClientRunRows / 10) == 0 ? perClientRunRows : perClientRunRows / 10;<a name="line.727"></a>
<span class="sourceLineNo">728</span>    int cycles = 1;<a name="line.728"></a>
<span class="sourceLineNo">729</span>    int columns = 1;<a name="line.729"></a>
<span class="sourceLineNo">730</span>    int families = 1;<a name="line.730"></a>
<span class="sourceLineNo">731</span>    int caching = 30;<a name="line.731"></a>
<span class="sourceLineNo">732</span>    int latencyThreshold = 0; // in millsecond<a name="line.732"></a>
<span class="sourceLineNo">733</span>    boolean addColumns = true;<a name="line.733"></a>
<span class="sourceLineNo">734</span>    MemoryCompactionPolicy inMemoryCompaction =<a name="line.734"></a>
<span class="sourceLineNo">735</span>      MemoryCompactionPolicy.valueOf(CompactingMemStore.COMPACTING_MEMSTORE_TYPE_DEFAULT);<a name="line.735"></a>
<span class="sourceLineNo">736</span>    boolean asyncPrefetch = false;<a name="line.736"></a>
<span class="sourceLineNo">737</span>    boolean cacheBlocks = true;<a name="line.737"></a>
<span class="sourceLineNo">738</span>    Scan.ReadType scanReadType = Scan.ReadType.DEFAULT;<a name="line.738"></a>
<span class="sourceLineNo">739</span>    long bufferSize = 2l * 1024l * 1024l;<a name="line.739"></a>
<span class="sourceLineNo">740</span>    Properties commandProperties;<a name="line.740"></a>
<span class="sourceLineNo">741</span><a name="line.741"></a>
<span class="sourceLineNo">742</span>    public TestOptions() {<a name="line.742"></a>
<span class="sourceLineNo">743</span>    }<a name="line.743"></a>
<span class="sourceLineNo">744</span><a name="line.744"></a>
<span class="sourceLineNo">745</span>    /**<a name="line.745"></a>
<span class="sourceLineNo">746</span>     * Clone constructor.<a name="line.746"></a>
<span class="sourceLineNo">747</span>     * @param that Object to copy from.<a name="line.747"></a>
<span class="sourceLineNo">748</span>     */<a name="line.748"></a>
<span class="sourceLineNo">749</span>    public TestOptions(TestOptions that) {<a name="line.749"></a>
<span class="sourceLineNo">750</span>      this.cmdName = that.cmdName;<a name="line.750"></a>
<span class="sourceLineNo">751</span>      this.cycles = that.cycles;<a name="line.751"></a>
<span class="sourceLineNo">752</span>      this.nomapred = that.nomapred;<a name="line.752"></a>
<span class="sourceLineNo">753</span>      this.startRow = that.startRow;<a name="line.753"></a>
<span class="sourceLineNo">754</span>      this.size = that.size;<a name="line.754"></a>
<span class="sourceLineNo">755</span>      this.perClientRunRows = that.perClientRunRows;<a name="line.755"></a>
<span class="sourceLineNo">756</span>      this.numClientThreads = that.numClientThreads;<a name="line.756"></a>
<span class="sourceLineNo">757</span>      this.totalRows = that.totalRows;<a name="line.757"></a>
<span class="sourceLineNo">758</span>      this.sampleRate = that.sampleRate;<a name="line.758"></a>
<span class="sourceLineNo">759</span>      this.traceRate = that.traceRate;<a name="line.759"></a>
<span class="sourceLineNo">760</span>      this.tableName = that.tableName;<a name="line.760"></a>
<span class="sourceLineNo">761</span>      this.flushCommits = that.flushCommits;<a name="line.761"></a>
<span class="sourceLineNo">762</span>      this.writeToWAL = that.writeToWAL;<a name="line.762"></a>
<span class="sourceLineNo">763</span>      this.autoFlush = that.autoFlush;<a name="line.763"></a>
<span class="sourceLineNo">764</span>      this.oneCon = that.oneCon;<a name="line.764"></a>
<span class="sourceLineNo">765</span>      this.connCount = that.connCount;<a name="line.765"></a>
<span class="sourceLineNo">766</span>      this.useTags = that.useTags;<a name="line.766"></a>
<span class="sourceLineNo">767</span>      this.noOfTags = that.noOfTags;<a name="line.767"></a>
<span class="sourceLineNo">768</span>      this.reportLatency = that.reportLatency;<a name="line.768"></a>
<span class="sourceLineNo">769</span>      this.latencyThreshold = that.latencyThreshold;<a name="line.769"></a>
<span class="sourceLineNo">770</span>      this.multiGet = that.multiGet;<a name="line.770"></a>
<span class="sourceLineNo">771</span>      this.multiPut = that.multiPut;<a name="line.771"></a>
<span class="sourceLineNo">772</span>      this.inMemoryCF = that.inMemoryCF;<a name="line.772"></a>
<span class="sourceLineNo">773</span>      this.presplitRegions = that.presplitRegions;<a name="line.773"></a>
<span class="sourceLineNo">774</span>      this.replicas = that.replicas;<a name="line.774"></a>
<span class="sourceLineNo">775</span>      this.splitPolicy = that.splitPolicy;<a name="line.775"></a>
<span class="sourceLineNo">776</span>      this.compression = that.compression;<a name="line.776"></a>
<span class="sourceLineNo">777</span>      this.encryption = that.encryption;<a name="line.777"></a>
<span class="sourceLineNo">778</span>      this.blockEncoding = that.blockEncoding;<a name="line.778"></a>
<span class="sourceLineNo">779</span>      this.filterAll = that.filterAll;<a name="line.779"></a>
<span class="sourceLineNo">780</span>      this.bloomType = that.bloomType;<a name="line.780"></a>
<span class="sourceLineNo">781</span>      this.blockSize = that.blockSize;<a name="line.781"></a>
<span class="sourceLineNo">782</span>      this.valueRandom = that.valueRandom;<a name="line.782"></a>
<span class="sourceLineNo">783</span>      this.valueZipf = that.valueZipf;<a name="line.783"></a>
<span class="sourceLineNo">784</span>      this.valueSize = that.valueSize;<a name="line.784"></a>
<span class="sourceLineNo">785</span>      this.period = that.period;<a name="line.785"></a>
<span class="sourceLineNo">786</span>      this.randomSleep = that.randomSleep;<a name="line.786"></a>
<span class="sourceLineNo">787</span>      this.measureAfter = that.measureAfter;<a name="line.787"></a>
<span class="sourceLineNo">788</span>      this.addColumns = that.addColumns;<a name="line.788"></a>
<span class="sourceLineNo">789</span>      this.columns = that.columns;<a name="line.789"></a>
<span class="sourceLineNo">790</span>      this.families = that.families;<a name="line.790"></a>
<span class="sourceLineNo">791</span>      this.caching = that.caching;<a name="line.791"></a>
<span class="sourceLineNo">792</span>      this.inMemoryCompaction = that.inMemoryCompaction;<a name="line.792"></a>
<span class="sourceLineNo">793</span>      this.asyncPrefetch = that.asyncPrefetch;<a name="line.793"></a>
<span class="sourceLineNo">794</span>      this.cacheBlocks = that.cacheBlocks;<a name="line.794"></a>
<span class="sourceLineNo">795</span>      this.scanReadType = that.scanReadType;<a name="line.795"></a>
<span class="sourceLineNo">796</span>      this.bufferSize = that.bufferSize;<a name="line.796"></a>
<span class="sourceLineNo">797</span>      this.commandProperties = that.commandProperties;<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 Properties getCommandProperties() {<a name="line.800"></a>
<span class="sourceLineNo">801</span>      return commandProperties;<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 int getCaching() {<a name="line.804"></a>
<span class="sourceLineNo">805</span>      return this.caching;<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 setCaching(final int caching) {<a name="line.808"></a>
<span class="sourceLineNo">809</span>      this.caching = caching;<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 int getColumns() {<a name="line.812"></a>
<span class="sourceLineNo">813</span>      return this.columns;<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 setColumns(final int columns) {<a name="line.816"></a>
<span class="sourceLineNo">817</span>      this.columns = columns;<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 int getFamilies() {<a name="line.820"></a>
<span class="sourceLineNo">821</span>      return this.families;<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 setFamilies(final int families) {<a name="line.824"></a>
<span class="sourceLineNo">825</span>      this.families = families;<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 int getCycles() {<a name="line.828"></a>
<span class="sourceLineNo">829</span>      return this.cycles;<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 setCycles(final int cycles) {<a name="line.832"></a>
<span class="sourceLineNo">833</span>      this.cycles = cycles;<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 boolean isValueZipf() {<a name="line.836"></a>
<span class="sourceLineNo">837</span>      return valueZipf;<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 setValueZipf(boolean valueZipf) {<a name="line.840"></a>
<span class="sourceLineNo">841</span>      this.valueZipf = valueZipf;<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 String getCmdName() {<a name="line.844"></a>
<span class="sourceLineNo">845</span>      return cmdName;<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 setCmdName(String cmdName) {<a name="line.848"></a>
<span class="sourceLineNo">849</span>      this.cmdName = cmdName;<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 int getRandomSleep() {<a name="line.852"></a>
<span class="sourceLineNo">853</span>      return randomSleep;<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 setRandomSleep(int randomSleep) {<a name="line.856"></a>
<span class="sourceLineNo">857</span>      this.randomSleep = randomSleep;<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 int getReplicas() {<a name="line.860"></a>
<span class="sourceLineNo">861</span>      return replicas;<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 setReplicas(int replicas) {<a name="line.864"></a>
<span class="sourceLineNo">865</span>      this.replicas = replicas;<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 String getSplitPolicy() {<a name="line.868"></a>
<span class="sourceLineNo">869</span>      return splitPolicy;<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 setSplitPolicy(String splitPolicy) {<a name="line.872"></a>
<span class="sourceLineNo">873</span>      this.splitPolicy = splitPolicy;<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 setNomapred(boolean nomapred) {<a name="line.876"></a>
<span class="sourceLineNo">877</span>      this.nomapred = nomapred;<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 setFilterAll(boolean filterAll) {<a name="line.880"></a>
<span class="sourceLineNo">881</span>      this.filterAll = filterAll;<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 setStartRow(int startRow) {<a name="line.884"></a>
<span class="sourceLineNo">885</span>      this.startRow = startRow;<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 setSize(float size) {<a name="line.888"></a>
<span class="sourceLineNo">889</span>      this.size = size;<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 setPerClientRunRows(int perClientRunRows) {<a name="line.892"></a>
<span class="sourceLineNo">893</span>      this.perClientRunRows = perClientRunRows;<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 setNumClientThreads(int numClientThreads) {<a name="line.896"></a>
<span class="sourceLineNo">897</span>      this.numClientThreads = numClientThreads;<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 setTotalRows(int totalRows) {<a name="line.900"></a>
<span class="sourceLineNo">901</span>      this.totalRows = totalRows;<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 setSampleRate(float sampleRate) {<a name="line.904"></a>
<span class="sourceLineNo">905</span>      this.sampleRate = sampleRate;<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 setTraceRate(double traceRate) {<a name="line.908"></a>
<span class="sourceLineNo">909</span>      this.traceRate = traceRate;<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 setTableName(String tableName) {<a name="line.912"></a>
<span class="sourceLineNo">913</span>      this.tableName = tableName;<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 void setFlushCommits(boolean flushCommits) {<a name="line.916"></a>
<span class="sourceLineNo">917</span>      this.flushCommits = flushCommits;<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 void setWriteToWAL(boolean writeToWAL) {<a name="line.920"></a>
<span class="sourceLineNo">921</span>      this.writeToWAL = writeToWAL;<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 void setAutoFlush(boolean autoFlush) {<a name="line.924"></a>
<span class="sourceLineNo">925</span>      this.autoFlush = autoFlush;<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 void setOneCon(boolean oneCon) {<a name="line.928"></a>
<span class="sourceLineNo">929</span>      this.oneCon = oneCon;<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 getConnCount() {<a name="line.932"></a>
<span class="sourceLineNo">933</span>      return connCount;<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 void setConnCount(int connCount) {<a name="line.936"></a>
<span class="sourceLineNo">937</span>      this.connCount = connCount;<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 void setUseTags(boolean useTags) {<a name="line.940"></a>
<span class="sourceLineNo">941</span>      this.useTags = useTags;<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 void setNoOfTags(int noOfTags) {<a name="line.944"></a>
<span class="sourceLineNo">945</span>      this.noOfTags = noOfTags;<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 void setReportLatency(boolean reportLatency) {<a name="line.948"></a>
<span class="sourceLineNo">949</span>      this.reportLatency = reportLatency;<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 void setMultiGet(int multiGet) {<a name="line.952"></a>
<span class="sourceLineNo">953</span>      this.multiGet = multiGet;<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 void setMultiPut(int multiPut) {<a name="line.956"></a>
<span class="sourceLineNo">957</span>      this.multiPut = multiPut;<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 void setInMemoryCF(boolean inMemoryCF) {<a name="line.960"></a>
<span class="sourceLineNo">961</span>      this.inMemoryCF = inMemoryCF;<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 void setPresplitRegions(int presplitRegions) {<a name="line.964"></a>
<span class="sourceLineNo">965</span>      this.presplitRegions = presplitRegions;<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 void setCompression(Compression.Algorithm compression) {<a name="line.968"></a>
<span class="sourceLineNo">969</span>      this.compression = compression;<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 void setEncryption(String encryption) {<a name="line.972"></a>
<span class="sourceLineNo">973</span>      this.encryption = encryption;<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 void setBloomType(BloomType bloomType) {<a name="line.976"></a>
<span class="sourceLineNo">977</span>      this.bloomType = bloomType;<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 void setBlockSize(int blockSize) {<a name="line.980"></a>
<span class="sourceLineNo">981</span>      this.blockSize = blockSize;<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 void setBlockEncoding(DataBlockEncoding blockEncoding) {<a name="line.984"></a>
<span class="sourceLineNo">985</span>      this.blockEncoding = blockEncoding;<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 void setValueRandom(boolean valueRandom) {<a name="line.988"></a>
<span class="sourceLineNo">989</span>      this.valueRandom = valueRandom;<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 void setValueSize(int valueSize) {<a name="line.992"></a>
<span class="sourceLineNo">993</span>      this.valueSize = valueSize;<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 void setBufferSize(long bufferSize) {<a name="line.996"></a>
<span class="sourceLineNo">997</span>      this.bufferSize = bufferSize;<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 void setPeriod(int period) {<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>      this.period = period;<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 boolean isNomapred() {<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>      return nomapred;<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 boolean isFilterAll() {<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>      return filterAll;<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 int getStartRow() {<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>      return startRow;<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 float getSize() {<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>      return size;<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 int getPerClientRunRows() {<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>      return perClientRunRows;<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 getNumClientThreads() {<a name="line.1024"></a>
<span class="sourceLineNo">1025</span>      return numClientThreads;<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 int getTotalRows() {<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>      return totalRows;<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 float getSampleRate() {<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>      return sampleRate;<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 double getTraceRate() {<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>      return traceRate;<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 String getTableName() {<a name="line.1040"></a>
<span class="sourceLineNo">1041</span>      return tableName;<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 boolean isFlushCommits() {<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>      return flushCommits;<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 boolean isWriteToWAL() {<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>      return writeToWAL;<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>    public boolean isAutoFlush() {<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>      return autoFlush;<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
<span class="sourceLineNo">1055</span><a name="line.1055"></a>
<span class="sourceLineNo">1056</span>    public boolean isUseTags() {<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>      return useTags;<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>    }<a name="line.1058"></a>
<span class="sourceLineNo">1059</span><a name="line.1059"></a>
<span class="sourceLineNo">1060</span>    public int getNoOfTags() {<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>      return noOfTags;<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>    }<a name="line.1062"></a>
<span class="sourceLineNo">1063</span><a name="line.1063"></a>
<span class="sourceLineNo">1064</span>    public boolean isReportLatency() {<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>      return reportLatency;<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
<span class="sourceLineNo">1067</span><a name="line.1067"></a>
<span class="sourceLineNo">1068</span>    public int getMultiGet() {<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>      return multiGet;<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>    }<a name="line.1070"></a>
<span class="sourceLineNo">1071</span><a name="line.1071"></a>
<span class="sourceLineNo">1072</span>    public int getMultiPut() {<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>      return multiPut;<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>    }<a name="line.1074"></a>
<span class="sourceLineNo">1075</span><a name="line.1075"></a>
<span class="sourceLineNo">1076</span>    public boolean isInMemoryCF() {<a name="line.1076"></a>
<span class="sourceLineNo">1077</span>      return inMemoryCF;<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>    }<a name="line.1078"></a>
<span class="sourceLineNo">1079</span><a name="line.1079"></a>
<span class="sourceLineNo">1080</span>    public int getPresplitRegions() {<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>      return presplitRegions;<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
<span class="sourceLineNo">1083</span><a name="line.1083"></a>
<span class="sourceLineNo">1084</span>    public Compression.Algorithm getCompression() {<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>      return compression;<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>    }<a name="line.1086"></a>
<span class="sourceLineNo">1087</span><a name="line.1087"></a>
<span class="sourceLineNo">1088</span>    public String getEncryption() {<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>      return encryption;<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>    }<a name="line.1090"></a>
<span class="sourceLineNo">1091</span><a name="line.1091"></a>
<span class="sourceLineNo">1092</span>    public DataBlockEncoding getBlockEncoding() {<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>      return blockEncoding;<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>    }<a name="line.1094"></a>
<span class="sourceLineNo">1095</span><a name="line.1095"></a>
<span class="sourceLineNo">1096</span>    public boolean isValueRandom() {<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>      return valueRandom;<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>    }<a name="line.1098"></a>
<span class="sourceLineNo">1099</span><a name="line.1099"></a>
<span class="sourceLineNo">1100</span>    public int getValueSize() {<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>      return valueSize;<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>    }<a name="line.1102"></a>
<span class="sourceLineNo">1103</span><a name="line.1103"></a>
<span class="sourceLineNo">1104</span>    public int getPeriod() {<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>      return period;<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>    }<a name="line.1106"></a>
<span class="sourceLineNo">1107</span><a name="line.1107"></a>
<span class="sourceLineNo">1108</span>    public BloomType getBloomType() {<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>      return bloomType;<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
<span class="sourceLineNo">1111</span><a name="line.1111"></a>
<span class="sourceLineNo">1112</span>    public int getBlockSize() {<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>      return blockSize;<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>    }<a name="line.1114"></a>
<span class="sourceLineNo">1115</span><a name="line.1115"></a>
<span class="sourceLineNo">1116</span>    public boolean isOneCon() {<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>      return oneCon;<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>    public int getMeasureAfter() {<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>      return measureAfter;<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>    }<a name="line.1122"></a>
<span class="sourceLineNo">1123</span><a name="line.1123"></a>
<span class="sourceLineNo">1124</span>    public void setMeasureAfter(int measureAfter) {<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>      this.measureAfter = measureAfter;<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>    }<a name="line.1126"></a>
<span class="sourceLineNo">1127</span><a name="line.1127"></a>
<span class="sourceLineNo">1128</span>    public boolean getAddColumns() {<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>      return addColumns;<a name="line.1129"></a>
<span class="sourceLineNo">1130</span>    }<a name="line.1130"></a>
<span class="sourceLineNo">1131</span><a name="line.1131"></a>
<span class="sourceLineNo">1132</span>    public void setAddColumns(boolean addColumns) {<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>      this.addColumns = addColumns;<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>    }<a name="line.1134"></a>
<span class="sourceLineNo">1135</span><a name="line.1135"></a>
<span class="sourceLineNo">1136</span>    public void setInMemoryCompaction(MemoryCompactionPolicy inMemoryCompaction) {<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>      this.inMemoryCompaction = inMemoryCompaction;<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>    public MemoryCompactionPolicy getInMemoryCompaction() {<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>      return this.inMemoryCompaction;<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>    }<a name="line.1142"></a>
<span class="sourceLineNo">1143</span><a name="line.1143"></a>
<span class="sourceLineNo">1144</span>    public long getBufferSize() {<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>      return this.bufferSize;<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>    }<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>  }<a name="line.1147"></a>
<span class="sourceLineNo">1148</span><a name="line.1148"></a>
<span class="sourceLineNo">1149</span>  /*<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>   * A test. Subclass to particularize what happens per row.<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>   */<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>  static abstract class TestBase {<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>    // Below is make it so when Tests are all running in the one<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>    // jvm, that they each have a differently seeded Random.<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>    private static final Random randomSeed = new Random(EnvironmentEdgeManager.currentTime());<a name="line.1155"></a>
<span class="sourceLineNo">1156</span><a name="line.1156"></a>
<span class="sourceLineNo">1157</span>    private static long nextRandomSeed() {<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>      return randomSeed.nextLong();<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
<span class="sourceLineNo">1160</span><a name="line.1160"></a>
<span class="sourceLineNo">1161</span>    private final int everyN;<a name="line.1161"></a>
<span class="sourceLineNo">1162</span><a name="line.1162"></a>
<span class="sourceLineNo">1163</span>    protected final Random rand = new Random(nextRandomSeed());<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>    protected final Configuration conf;<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>    protected final TestOptions opts;<a name="line.1165"></a>
<span class="sourceLineNo">1166</span><a name="line.1166"></a>
<span class="sourceLineNo">1167</span>    protected final Status status;<a name="line.1167"></a>
<span class="sourceLineNo">1168</span><a name="line.1168"></a>
<span class="sourceLineNo">1169</span>    private String testName;<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>    protected Histogram latencyHistogram;<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>    private Histogram replicaLatencyHistogram;<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>    private Histogram valueSizeHistogram;<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>    private Histogram rpcCallsHistogram;<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>    private Histogram remoteRpcCallsHistogram;<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>    private Histogram millisBetweenNextHistogram;<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>    private Histogram regionsScannedHistogram;<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>    private Histogram bytesInResultsHistogram;<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>    private Histogram bytesInRemoteResultsHistogram;<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>    private RandomDistribution.Zipf zipf;<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>    private long numOfReplyOverLatencyThreshold = 0;<a name="line.1180"></a>
<span class="sourceLineNo">1181</span>    private long numOfReplyFromReplica = 0;<a name="line.1181"></a>
<span class="sourceLineNo">1182</span><a name="line.1182"></a>
<span class="sourceLineNo">1183</span>    /**<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>     * Note that all subclasses of this class must provide a public constructor that has the exact<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>     * same list of arguments.<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>     */<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>    TestBase(final Configuration conf, final TestOptions options, final Status status) {<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>      this.conf = conf;<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>      this.opts = options;<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>      this.status = status;<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>      this.testName = this.getClass().getSimpleName();<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>      everyN = (int) (opts.totalRows / (opts.totalRows * opts.sampleRate));<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>      if (options.isValueZipf()) {<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>        this.zipf = new RandomDistribution.Zipf(this.rand, 1, options.getValueSize(), 1.2);<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>      }<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>      LOG.info("Sampling 1 every " + everyN + " out of " + opts.perClientRunRows + " total rows.");<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>    }<a name="line.1197"></a>
<span class="sourceLineNo">1198</span><a name="line.1198"></a>
<span class="sourceLineNo">1199</span>    int getValueLength(final Random r) {<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>      if (this.opts.isValueRandom()) {<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>        return r.nextInt(opts.valueSize);<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>      } else if (this.opts.isValueZipf()) {<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>        return Math.abs(this.zipf.nextInt());<a name="line.1203"></a>
<span class="sourceLineNo">1204</span>      } else {<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>        return opts.valueSize;<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>      }<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>    }<a name="line.1207"></a>
<span class="sourceLineNo">1208</span><a name="line.1208"></a>
<span class="sourceLineNo">1209</span>    void updateValueSize(final Result[] rs) throws IOException {<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>      updateValueSize(rs, 0);<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>    }<a name="line.1211"></a>
<span class="sourceLineNo">1212</span><a name="line.1212"></a>
<span class="sourceLineNo">1213</span>    void updateValueSize(final Result[] rs, final long latency) throws IOException {<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>      if (rs == null || (latency == 0)) return;<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>      for (Result r : rs)<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>        updateValueSize(r, latency);<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>    }<a name="line.1217"></a>
<span class="sourceLineNo">1218</span><a name="line.1218"></a>
<span class="sourceLineNo">1219</span>    void updateValueSize(final Result r) throws IOException {<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>      updateValueSize(r, 0);<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>    }<a name="line.1221"></a>
<span class="sourceLineNo">1222</span><a name="line.1222"></a>
<span class="sourceLineNo">1223</span>    void updateValueSize(final Result r, final long latency) throws IOException {<a name="line.1223"></a>
<span class="sourceLineNo">1224</span>      if (r == null || (latency == 0)) return;<a name="line.1224"></a>
<span class="sourceLineNo">1225</span>      int size = 0;<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>      // update replicaHistogram<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>      if (r.isStale()) {<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>        replicaLatencyHistogram.update(latency / 1000);<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>        numOfReplyFromReplica++;<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>      }<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>      if (!isRandomValueSize()) return;<a name="line.1231"></a>
<span class="sourceLineNo">1232</span><a name="line.1232"></a>
<span class="sourceLineNo">1233</span>      for (CellScanner scanner = r.cellScanner(); scanner.advance();) {<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>        size += scanner.current().getValueLength();<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>      }<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>      updateValueSize(size);<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
<span class="sourceLineNo">1238</span><a name="line.1238"></a>
<span class="sourceLineNo">1239</span>    void updateValueSize(final int valueSize) {<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>      if (!isRandomValueSize()) return;<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>      this.valueSizeHistogram.update(valueSize);<a name="line.1241"></a>
<span class="sourceLineNo">1242</span>    }<a name="line.1242"></a>
<span class="sourceLineNo">1243</span><a name="line.1243"></a>
<span class="sourceLineNo">1244</span>    void updateScanMetrics(final ScanMetrics metrics) {<a name="line.1244"></a>
<span class="sourceLineNo">1245</span>      if (metrics == null) return;<a name="line.1245"></a>
<span class="sourceLineNo">1246</span>      Map&lt;String, Long&gt; metricsMap = metrics.getMetricsMap();<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>      Long rpcCalls = metricsMap.get(ScanMetrics.RPC_CALLS_METRIC_NAME);<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>      if (rpcCalls != null) {<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>        this.rpcCallsHistogram.update(rpcCalls.longValue());<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>      }<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>      Long remoteRpcCalls = metricsMap.get(ScanMetrics.REMOTE_RPC_CALLS_METRIC_NAME);<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>      if (remoteRpcCalls != null) {<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>        this.remoteRpcCallsHistogram.update(remoteRpcCalls.longValue());<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>      }<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>      Long millisBetweenNext = metricsMap.get(ScanMetrics.MILLIS_BETWEEN_NEXTS_METRIC_NAME);<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>      if (millisBetweenNext != null) {<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>        this.millisBetweenNextHistogram.update(millisBetweenNext.longValue());<a name="line.1257"></a>
<span class="sourceLineNo">1258</span>      }<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>      Long regionsScanned = metricsMap.get(ScanMetrics.REGIONS_SCANNED_METRIC_NAME);<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>      if (regionsScanned != null) {<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>        this.regionsScannedHistogram.update(regionsScanned.longValue());<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>      }<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>      Long bytesInResults = metricsMap.get(ScanMetrics.BYTES_IN_RESULTS_METRIC_NAME);<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>      if (bytesInResults != null &amp;&amp; bytesInResults.longValue() &gt; 0) {<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>        this.bytesInResultsHistogram.update(bytesInResults.longValue());<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>      }<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>      Long bytesInRemoteResults = metricsMap.get(ScanMetrics.BYTES_IN_REMOTE_RESULTS_METRIC_NAME);<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>      if (bytesInRemoteResults != null &amp;&amp; bytesInRemoteResults.longValue() &gt; 0) {<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>        this.bytesInRemoteResultsHistogram.update(bytesInRemoteResults.longValue());<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>      }<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>    }<a name="line.1271"></a>
<span class="sourceLineNo">1272</span><a name="line.1272"></a>
<span class="sourceLineNo">1273</span>    String generateStatus(final int sr, final int i, final int lr) {<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>      return "row [start=" + sr + ", current=" + i + ", last=" + lr + "], latency ["<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>        + getShortLatencyReport() + "]"<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>        + (!isRandomValueSize() ? "" : ", value size [" + getShortValueSizeReport() + "]");<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>    }<a name="line.1277"></a>
<span class="sourceLineNo">1278</span><a name="line.1278"></a>
<span class="sourceLineNo">1279</span>    boolean isRandomValueSize() {<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>      return opts.valueRandom;<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>    protected int getReportingPeriod() {<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>      return opts.period;<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>    }<a name="line.1285"></a>
<span class="sourceLineNo">1286</span><a name="line.1286"></a>
<span class="sourceLineNo">1287</span>    /**<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>     * Populated by testTakedown. Only implemented by RandomReadTest at the moment.<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>     */<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>    public Histogram getLatencyHistogram() {<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>      return latencyHistogram;<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>    }<a name="line.1292"></a>
<span class="sourceLineNo">1293</span><a name="line.1293"></a>
<span class="sourceLineNo">1294</span>    void testSetup() throws IOException {<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>      // test metrics<a name="line.1295"></a>
<span class="sourceLineNo">1296</span>      latencyHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>      // If it is a replica test, set up histogram for replica.<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>      if (opts.replicas &gt; 1) {<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>        replicaLatencyHistogram =<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>          YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>      }<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>      valueSizeHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>      // scan metrics<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>      rpcCallsHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1304"></a>
<span class="sourceLineNo">1305</span>      remoteRpcCallsHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>      millisBetweenNextHistogram =<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>        YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>      regionsScannedHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>      bytesInResultsHistogram = YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>      bytesInRemoteResultsHistogram =<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>        YammerHistogramUtils.newHistogram(new UniformReservoir(1024 * 500));<a name="line.1311"></a>
<span class="sourceLineNo">1312</span><a name="line.1312"></a>
<span class="sourceLineNo">1313</span>      onStartup();<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>    }<a name="line.1314"></a>
<span class="sourceLineNo">1315</span><a name="line.1315"></a>
<span class="sourceLineNo">1316</span>    abstract void onStartup() throws IOException;<a name="line.1316"></a>
<span class="sourceLineNo">1317</span><a name="line.1317"></a>
<span class="sourceLineNo">1318</span>    void testTakedown() throws IOException {<a name="line.1318"></a>
<span class="sourceLineNo">1319</span>      onTakedown();<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>      // Print all stats for this thread continuously.<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>      // Synchronize on Test.class so different threads don't intermingle the<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>      // output. We can't use 'this' here because each thread has its own instance of Test class.<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>      synchronized (Test.class) {<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>        status.setStatus("Test : " + testName + ", Thread : " + Thread.currentThread().getName());<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>        status<a name="line.1325"></a>
<span class="sourceLineNo">1326</span>          .setStatus("Latency (us) : " + YammerHistogramUtils.getHistogramReport(latencyHistogram));<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>        if (opts.replicas &gt; 1) {<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>          status.setStatus("Latency (us) from Replica Regions: "<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>            + YammerHistogramUtils.getHistogramReport(replicaLatencyHistogram));<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>        }<a name="line.1330"></a>
<span class="sourceLineNo">1331</span>        status.setStatus("Num measures (latency) : " + latencyHistogram.getCount());<a name="line.1331"></a>
<span class="sourceLineNo">1332</span>        status.setStatus(YammerHistogramUtils.getPrettyHistogramReport(latencyHistogram));<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>        if (valueSizeHistogram.getCount() &gt; 0) {<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>          status.setStatus(<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>            "ValueSize (bytes) : " + YammerHistogramUtils.getHistogramReport(valueSizeHistogram));<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>          status.setStatus("Num measures (ValueSize): " + valueSizeHistogram.getCount());<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>          status.setStatus(YammerHistogramUtils.getPrettyHistogramReport(valueSizeHistogram));<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>        } else {<a name="line.1338"></a>
<span class="sourceLineNo">1339</span>          status.setStatus("No valueSize statistics available");<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>        }<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>        if (rpcCallsHistogram.getCount() &gt; 0) {<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>          status.setStatus(<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>            "rpcCalls (count): " + YammerHistogramUtils.getHistogramReport(rpcCallsHistogram));<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>        }<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>        if (remoteRpcCallsHistogram.getCount() &gt; 0) {<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>          status.setStatus("remoteRpcCalls (count): "<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>            + YammerHistogramUtils.getHistogramReport(remoteRpcCallsHistogram));<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>        }<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>        if (millisBetweenNextHistogram.getCount() &gt; 0) {<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>          status.setStatus("millisBetweenNext (latency): "<a name="line.1350"></a>
<span class="sourceLineNo">1351</span>            + YammerHistogramUtils.getHistogramReport(millisBetweenNextHistogram));<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>        }<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>        if (regionsScannedHistogram.getCount() &gt; 0) {<a name="line.1353"></a>
<span class="sourceLineNo">1354</span>          status.setStatus("regionsScanned (count): "<a name="line.1354"></a>
<span class="sourceLineNo">1355</span>            + YammerHistogramUtils.getHistogramReport(regionsScannedHistogram));<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>        }<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>        if (bytesInResultsHistogram.getCount() &gt; 0) {<a name="line.1357"></a>
<span class="sourceLineNo">1358</span>          status.setStatus("bytesInResults (size): "<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>            + YammerHistogramUtils.getHistogramReport(bytesInResultsHistogram));<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>        }<a name="line.1360"></a>
<span class="sourceLineNo">1361</span>        if (bytesInRemoteResultsHistogram.getCount() &gt; 0) {<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>          status.setStatus("bytesInRemoteResults (size): "<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>            + YammerHistogramUtils.getHistogramReport(bytesInRemoteResultsHistogram));<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>        }<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>      }<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>    }<a name="line.1366"></a>
<span class="sourceLineNo">1367</span><a name="line.1367"></a>
<span class="sourceLineNo">1368</span>    abstract void onTakedown() throws IOException;<a name="line.1368"></a>
<span class="sourceLineNo">1369</span><a name="line.1369"></a>
<span class="sourceLineNo">1370</span>    /*<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>     * Run test<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>     * @return Elapsed time.<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>     */<a name="line.1373"></a>
<span class="sourceLineNo">1374</span>    long test() throws IOException, InterruptedException {<a name="line.1374"></a>
<span class="sourceLineNo">1375</span>      testSetup();<a name="line.1375"></a>
<span class="sourceLineNo">1376</span>      LOG.info("Timed test starting in thread " + Thread.currentThread().getName());<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>      final long startTime = System.nanoTime();<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>      try {<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>        testTimed();<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>      } finally {<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>        testTakedown();<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>      }<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>      return (System.nanoTime() - startTime) / 1000000;<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>    }<a name="line.1384"></a>
<span class="sourceLineNo">1385</span><a name="line.1385"></a>
<span class="sourceLineNo">1386</span>    int getStartRow() {<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>      return opts.startRow;<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>    }<a name="line.1388"></a>
<span class="sourceLineNo">1389</span><a name="line.1389"></a>
<span class="sourceLineNo">1390</span>    int getLastRow() {<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>      return getStartRow() + opts.perClientRunRows;<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>    }<a name="line.1392"></a>
<span class="sourceLineNo">1393</span><a name="line.1393"></a>
<span class="sourceLineNo">1394</span>    /**<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>     * Provides an extension point for tests that don't want a per row invocation.<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>     */<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>    void testTimed() throws IOException, InterruptedException {<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>      int startRow = getStartRow();<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>      int lastRow = getLastRow();<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>      // Report on completion of 1/10th of total.<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>      for (int ii = 0; ii &lt; opts.cycles; ii++) {<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>        if (opts.cycles &gt; 1) LOG.info("Cycle=" + ii + " of " + opts.cycles);<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>        for (int i = startRow; i &lt; lastRow; i++) {<a name="line.1403"></a>
<span class="sourceLineNo">1404</span>          if (i % everyN != 0) continue;<a name="line.1404"></a>
<span class="sourceLineNo">1405</span>          long startTime = System.nanoTime();<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>          boolean requestSent = false;<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>          Span span = TraceUtil.getGlobalTracer().spanBuilder("test row").startSpan();<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>          try (Scope scope = span.makeCurrent()) {<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>            requestSent = testRow(i, startTime);<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>          } finally {<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>            span.end();<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>          }<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>          if ((i - startRow) &gt; opts.measureAfter) {<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>            // If multiget or multiput is enabled, say set to 10, testRow() returns immediately<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>            // first 9 times and sends the actual get request in the 10th iteration.<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>            // We should only set latency when actual request is sent because otherwise<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>            // it turns out to be 0.<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>            if (requestSent) {<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>              long latency = (System.nanoTime() - startTime) / 1000;<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>              latencyHistogram.update(latency);<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>              if ((opts.latencyThreshold &gt; 0) &amp;&amp; (latency / 1000 &gt;= opts.latencyThreshold)) {<a name="line.1421"></a>
<span class="sourceLineNo">1422</span>                numOfReplyOverLatencyThreshold++;<a name="line.1422"></a>
<span class="sourceLineNo">1423</span>              }<a name="line.1423"></a>
<span class="sourceLineNo">1424</span>            }<a name="line.1424"></a>
<span class="sourceLineNo">1425</span>            if (status != null &amp;&amp; i &gt; 0 &amp;&amp; (i % getReportingPeriod()) == 0) {<a name="line.1425"></a>
<span class="sourceLineNo">1426</span>              status.setStatus(generateStatus(startRow, i, lastRow));<a name="line.1426"></a>
<span class="sourceLineNo">1427</span>            }<a name="line.1427"></a>
<span class="sourceLineNo">1428</span>          }<a name="line.1428"></a>
<span class="sourceLineNo">1429</span>        }<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>    /** Returns Subset of the histograms' calculation. */<a name="line.1433"></a>
<span class="sourceLineNo">1434</span>    public String getShortLatencyReport() {<a name="line.1434"></a>
<span class="sourceLineNo">1435</span>      return YammerHistogramUtils.getShortHistogramReport(this.latencyHistogram);<a name="line.1435"></a>
<span class="sourceLineNo">1436</span>    }<a name="line.1436"></a>
<span class="sourceLineNo">1437</span><a name="line.1437"></a>
<span class="sourceLineNo">1438</span>    /** Returns Subset of the histograms' calculation. */<a name="line.1438"></a>
<span class="sourceLineNo">1439</span>    public String getShortValueSizeReport() {<a name="line.1439"></a>
<span class="sourceLineNo">1440</span>      return YammerHistogramUtils.getShortHistogramReport(this.valueSizeHistogram);<a name="line.1440"></a>
<span class="sourceLineNo">1441</span>    }<a name="line.1441"></a>
<span class="sourceLineNo">1442</span><a name="line.1442"></a>
<span class="sourceLineNo">1443</span>    /**<a name="line.1443"></a>
<span class="sourceLineNo">1444</span>     * Test for individual row.<a name="line.1444"></a>
<span class="sourceLineNo">1445</span>     * @param i Row index.<a name="line.1445"></a>
<span class="sourceLineNo">1446</span>     * @return true if the row was sent to server and need to record metrics. False if not, multiGet<a name="line.1446"></a>
<span class="sourceLineNo">1447</span>     *         and multiPut e.g., the rows are sent to server only if enough gets/puts are gathered.<a name="line.1447"></a>
<span class="sourceLineNo">1448</span>     */<a name="line.1448"></a>
<span class="sourceLineNo">1449</span>    abstract boolean testRow(final int i, final long startTime)<a name="line.1449"></a>
<span class="sourceLineNo">1450</span>      throws IOException, InterruptedException;<a name="line.1450"></a>
<span class="sourceLineNo">1451</span>  }<a name="line.1451"></a>
<span class="sourceLineNo">1452</span><a name="line.1452"></a>
<span class="sourceLineNo">1453</span>  static abstract class Test extends TestBase {<a name="line.1453"></a>
<span class="sourceLineNo">1454</span>    protected Connection connection;<a name="line.1454"></a>
<span class="sourceLineNo">1455</span><a name="line.1455"></a>
<span class="sourceLineNo">1456</span>    Test(final Connection con, final TestOptions options, final Status status) {<a name="line.1456"></a>
<span class="sourceLineNo">1457</span>      super(con == null ? HBaseConfiguration.create() : con.getConfiguration(), options, status);<a name="line.1457"></a>
<span class="sourceLineNo">1458</span>      this.connection = con;<a name="line.1458"></a>
<span class="sourceLineNo">1459</span>    }<a name="line.1459"></a>
<span class="sourceLineNo">1460</span>  }<a name="line.1460"></a>
<span class="sourceLineNo">1461</span><a name="line.1461"></a>
<span class="sourceLineNo">1462</span>  static abstract class AsyncTest extends TestBase {<a name="line.1462"></a>
<span class="sourceLineNo">1463</span>    protected AsyncConnection connection;<a name="line.1463"></a>
<span class="sourceLineNo">1464</span><a name="line.1464"></a>
<span class="sourceLineNo">1465</span>    AsyncTest(final AsyncConnection con, final TestOptions options, final Status status) {<a name="line.1465"></a>
<span class="sourceLineNo">1466</span>      super(con == null ? HBaseConfiguration.create() : con.getConfiguration(), options, status);<a name="line.1466"></a>
<span class="sourceLineNo">1467</span>      this.connection = con;<a name="line.1467"></a>
<span class="sourceLineNo">1468</span>    }<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>  static abstract class TableTest extends Test {<a name="line.1471"></a>
<span class="sourceLineNo">1472</span>    protected Table table;<a name="line.1472"></a>
<span class="sourceLineNo">1473</span><a name="line.1473"></a>
<span class="sourceLineNo">1474</span>    TableTest(Connection con, TestOptions options, Status status) {<a name="line.1474"></a>
<span class="sourceLineNo">1475</span>      super(con, options, status);<a name="line.1475"></a>
<span class="sourceLineNo">1476</span>    }<a name="line.1476"></a>
<span class="sourceLineNo">1477</span><a name="line.1477"></a>
<span class="sourceLineNo">1478</span>    @Override<a name="line.1478"></a>
<span class="sourceLineNo">1479</span>    void onStartup() throws IOException {<a name="line.1479"></a>
<span class="sourceLineNo">1480</span>      this.table = connection.getTable(TableName.valueOf(opts.tableName));<a name="line.1480"></a>
<span class="sourceLineNo">1481</span>    }<a name="line.1481"></a>
<span class="sourceLineNo">1482</span><a name="line.1482"></a>
<span class="sourceLineNo">1483</span>    @Override<a name="line.1483"></a>
<span class="sourceLineNo">1484</span>    void onTakedown() throws IOException {<a name="line.1484"></a>
<span class="sourceLineNo">1485</span>      table.close();<a name="line.1485"></a>
<span class="sourceLineNo">1486</span>    }<a name="line.1486"></a>
<span class="sourceLineNo">1487</span>  }<a name="line.1487"></a>
<span class="sourceLineNo">1488</span><a name="line.1488"></a>
<span class="sourceLineNo">1489</span>  /*<a name="line.1489"></a>
<span class="sourceLineNo">1490</span>   * Parent class for all meta tests: MetaWriteTest, MetaRandomReadTest and CleanMetaTest<a name="line.1490"></a>
<span class="sourceLineNo">1491</span>   */<a name="line.1491"></a>
<span class="sourceLineNo">1492</span>  static abstract class MetaTest extends TableTest {<a name="line.1492"></a>
<span class="sourceLineNo">1493</span>    protected int keyLength;<a name="line.1493"></a>
<span class="sourceLineNo">1494</span><a name="line.1494"></a>
<span class="sourceLineNo">1495</span>    MetaTest(Connection con, TestOptions options, Status status) {<a name="line.1495"></a>
<span class="sourceLineNo">1496</span>      super(con, options, status);<a name="line.1496"></a>
<span class="sourceLineNo">1497</span>      keyLength = Integer.toString(opts.perClientRunRows).length();<a name="line.1497"></a>
<span class="sourceLineNo">1498</span>    }<a name="line.1498"></a>
<span class="sourceLineNo">1499</span><a name="line.1499"></a>
<span class="sourceLineNo">1500</span>    @Override<a name="line.1500"></a>
<span class="sourceLineNo">1501</span>    void onTakedown() throws IOException {<a name="line.1501"></a>
<span class="sourceLineNo">1502</span>      // No clean up<a name="line.1502"></a>
<span class="sourceLineNo">1503</span>    }<a name="line.1503"></a>
<span class="sourceLineNo">1504</span><a name="line.1504"></a>
<span class="sourceLineNo">1505</span>    /*<a name="line.1505"></a>
<span class="sourceLineNo">1506</span>     * Generates Lexicographically ascending strings<a name="line.1506"></a>
<span class="sourceLineNo">1507</span>     */<a name="line.1507"></a>
<span class="sourceLineNo">1508</span>    protected byte[] getSplitKey(final int i) {<a name="line.1508"></a>
<span class="sourceLineNo">1509</span>      return Bytes.toBytes(String.format("%0" + keyLength + "d", i));<a name="line.1509"></a>
<span class="sourceLineNo">1510</span>    }<a name="line.1510"></a>
<span class="sourceLineNo">1511</span><a name="line.1511"></a>
<span class="sourceLineNo">1512</span>  }<a name="line.1512"></a>
<span class="sourceLineNo">1513</span><a name="line.1513"></a>
<span class="sourceLineNo">1514</span>  static abstract class AsyncTableTest extends AsyncTest {<a name="line.1514"></a>
<span class="sourceLineNo">1515</span>    protected AsyncTable&lt;?&gt; table;<a name="line.1515"></a>
<span class="sourceLineNo">1516</span><a name="line.1516"></a>
<span class="sourceLineNo">1517</span>    AsyncTableTest(AsyncConnection con, TestOptions options, Status status) {<a name="line.1517"></a>
<span class="sourceLineNo">1518</span>      super(con, options, status);<a name="line.1518"></a>
<span class="sourceLineNo">1519</span>    }<a name="line.1519"></a>
<span class="sourceLineNo">1520</span><a name="line.1520"></a>
<span class="sourceLineNo">1521</span>    @Override<a name="line.1521"></a>
<span class="sourceLineNo">1522</span>    void onStartup() throws IOException {<a name="line.1522"></a>
<span class="sourceLineNo">1523</span>      this.table = connection.getTable(TableName.valueOf(opts.tableName));<a name="line.1523"></a>
<span class="sourceLineNo">1524</span>    }<a name="line.1524"></a>
<span class="sourceLineNo">1525</span><a name="line.1525"></a>
<span class="sourceLineNo">1526</span>    @Override<a name="line.1526"></a>
<span class="sourceLineNo">1527</span>    void onTakedown() throws IOException {<a name="line.1527"></a>
<span class="sourceLineNo">1528</span>    }<a name="line.1528"></a>
<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
<span class="sourceLineNo">1530</span><a name="line.1530"></a>
<span class="sourceLineNo">1531</span>  static class AsyncRandomReadTest extends AsyncTableTest {<a name="line.1531"></a>
<span class="sourceLineNo">1532</span>    private final Consistency consistency;<a name="line.1532"></a>
<span class="sourceLineNo">1533</span>    private ArrayList&lt;Get&gt; gets;<a name="line.1533"></a>
<span class="sourceLineNo">1534</span><a name="line.1534"></a>
<span class="sourceLineNo">1535</span>    AsyncRandomReadTest(AsyncConnection con, TestOptions options, Status status) {<a name="line.1535"></a>
<span class="sourceLineNo">1536</span>      super(con, options, status);<a name="line.1536"></a>
<span class="sourceLineNo">1537</span>      consistency = options.replicas == DEFAULT_OPTS.replicas ? null : Consistency.TIMELINE;<a name="line.1537"></a>
<span class="sourceLineNo">1538</span>      if (opts.multiGet &gt; 0) {<a name="line.1538"></a>
<span class="sourceLineNo">1539</span>        LOG.info("MultiGet enabled. Sending GETs in batches of " + opts.multiGet + ".");<a name="line.1539"></a>
<span class="sourceLineNo">1540</span>        this.gets = new ArrayList&lt;&gt;(opts.multiGet);<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><a name="line.1543"></a>
<span class="sourceLineNo">1544</span>    @Override<a name="line.1544"></a>
<span class="sourceLineNo">1545</span>    boolean testRow(final int i, final long startTime) throws IOException, InterruptedException {<a name="line.1545"></a>
<span class="sourceLineNo">1546</span>      if (opts.randomSleep &gt; 0) {<a name="line.1546"></a>
<span class="sourceLineNo">1547</span>        Thread.sleep(ThreadLocalRandom.current().nextInt(opts.randomSleep));<a name="line.1547"></a>
<span class="sourceLineNo">1548</span>      }<a name="line.1548"></a>
<span class="sourceLineNo">1549</span>      Get get = new Get(getRandomRow(this.rand, opts.totalRows));<a name="line.1549"></a>
<span class="sourceLineNo">1550</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1550"></a>
<span class="sourceLineNo">1551</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1551"></a>
<span class="sourceLineNo">1552</span>        if (opts.addColumns) {<a name="line.1552"></a>
<span class="sourceLineNo">1553</span>          for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1553"></a>
<span class="sourceLineNo">1554</span>            byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.1554"></a>
<span class="sourceLineNo">1555</span>            get.addColumn(familyName, qualifier);<a name="line.1555"></a>
<span class="sourceLineNo">1556</span>          }<a name="line.1556"></a>
<span class="sourceLineNo">1557</span>        } else {<a name="line.1557"></a>
<span class="sourceLineNo">1558</span>          get.addFamily(familyName);<a name="line.1558"></a>
<span class="sourceLineNo">1559</span>        }<a name="line.1559"></a>
<span class="sourceLineNo">1560</span>      }<a name="line.1560"></a>
<span class="sourceLineNo">1561</span>      if (opts.filterAll) {<a name="line.1561"></a>
<span class="sourceLineNo">1562</span>        get.setFilter(new FilterAllFilter());<a name="line.1562"></a>
<span class="sourceLineNo">1563</span>      }<a name="line.1563"></a>
<span class="sourceLineNo">1564</span>      get.setConsistency(consistency);<a name="line.1564"></a>
<span class="sourceLineNo">1565</span>      if (LOG.isTraceEnabled()) LOG.trace(get.toString());<a name="line.1565"></a>
<span class="sourceLineNo">1566</span>      try {<a name="line.1566"></a>
<span class="sourceLineNo">1567</span>        if (opts.multiGet &gt; 0) {<a name="line.1567"></a>
<span class="sourceLineNo">1568</span>          this.gets.add(get);<a name="line.1568"></a>
<span class="sourceLineNo">1569</span>          if (this.gets.size() == opts.multiGet) {<a name="line.1569"></a>
<span class="sourceLineNo">1570</span>            Result[] rs =<a name="line.1570"></a>
<span class="sourceLineNo">1571</span>              this.table.get(this.gets).stream().map(f -&gt; propagate(f::get)).toArray(Result[]::new);<a name="line.1571"></a>
<span class="sourceLineNo">1572</span>            updateValueSize(rs);<a name="line.1572"></a>
<span class="sourceLineNo">1573</span>            this.gets.clear();<a name="line.1573"></a>
<span class="sourceLineNo">1574</span>          } else {<a name="line.1574"></a>
<span class="sourceLineNo">1575</span>            return false;<a name="line.1575"></a>
<span class="sourceLineNo">1576</span>          }<a name="line.1576"></a>
<span class="sourceLineNo">1577</span>        } else {<a name="line.1577"></a>
<span class="sourceLineNo">1578</span>          updateValueSize(this.table.get(get).get());<a name="line.1578"></a>
<span class="sourceLineNo">1579</span>        }<a name="line.1579"></a>
<span class="sourceLineNo">1580</span>      } catch (ExecutionException e) {<a name="line.1580"></a>
<span class="sourceLineNo">1581</span>        throw new IOException(e);<a name="line.1581"></a>
<span class="sourceLineNo">1582</span>      }<a name="line.1582"></a>
<span class="sourceLineNo">1583</span>      return true;<a name="line.1583"></a>
<span class="sourceLineNo">1584</span>    }<a name="line.1584"></a>
<span class="sourceLineNo">1585</span><a name="line.1585"></a>
<span class="sourceLineNo">1586</span>    public static RuntimeException runtime(Throwable e) {<a name="line.1586"></a>
<span class="sourceLineNo">1587</span>      if (e instanceof RuntimeException) {<a name="line.1587"></a>
<span class="sourceLineNo">1588</span>        return (RuntimeException) e;<a name="line.1588"></a>
<span class="sourceLineNo">1589</span>      }<a name="line.1589"></a>
<span class="sourceLineNo">1590</span>      return new RuntimeException(e);<a name="line.1590"></a>
<span class="sourceLineNo">1591</span>    }<a name="line.1591"></a>
<span class="sourceLineNo">1592</span><a name="line.1592"></a>
<span class="sourceLineNo">1593</span>    public static &lt;V&gt; V propagate(Callable&lt;V&gt; callable) {<a name="line.1593"></a>
<span class="sourceLineNo">1594</span>      try {<a name="line.1594"></a>
<span class="sourceLineNo">1595</span>        return callable.call();<a name="line.1595"></a>
<span class="sourceLineNo">1596</span>      } catch (Exception e) {<a name="line.1596"></a>
<span class="sourceLineNo">1597</span>        throw runtime(e);<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><a name="line.1600"></a>
<span class="sourceLineNo">1601</span>    @Override<a name="line.1601"></a>
<span class="sourceLineNo">1602</span>    protected int getReportingPeriod() {<a name="line.1602"></a>
<span class="sourceLineNo">1603</span>      int period = opts.perClientRunRows / 10;<a name="line.1603"></a>
<span class="sourceLineNo">1604</span>      return period == 0 ? opts.perClientRunRows : period;<a name="line.1604"></a>
<span class="sourceLineNo">1605</span>    }<a name="line.1605"></a>
<span class="sourceLineNo">1606</span><a name="line.1606"></a>
<span class="sourceLineNo">1607</span>    @Override<a name="line.1607"></a>
<span class="sourceLineNo">1608</span>    protected void testTakedown() throws IOException {<a name="line.1608"></a>
<span class="sourceLineNo">1609</span>      if (this.gets != null &amp;&amp; this.gets.size() &gt; 0) {<a name="line.1609"></a>
<span class="sourceLineNo">1610</span>        this.table.get(gets);<a name="line.1610"></a>
<span class="sourceLineNo">1611</span>        this.gets.clear();<a name="line.1611"></a>
<span class="sourceLineNo">1612</span>      }<a name="line.1612"></a>
<span class="sourceLineNo">1613</span>      super.testTakedown();<a name="line.1613"></a>
<span class="sourceLineNo">1614</span>    }<a name="line.1614"></a>
<span class="sourceLineNo">1615</span>  }<a name="line.1615"></a>
<span class="sourceLineNo">1616</span><a name="line.1616"></a>
<span class="sourceLineNo">1617</span>  static class AsyncRandomWriteTest extends AsyncSequentialWriteTest {<a name="line.1617"></a>
<span class="sourceLineNo">1618</span><a name="line.1618"></a>
<span class="sourceLineNo">1619</span>    AsyncRandomWriteTest(AsyncConnection con, TestOptions options, Status status) {<a name="line.1619"></a>
<span class="sourceLineNo">1620</span>      super(con, options, status);<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>    @Override<a name="line.1623"></a>
<span class="sourceLineNo">1624</span>    protected byte[] generateRow(final int i) {<a name="line.1624"></a>
<span class="sourceLineNo">1625</span>      return getRandomRow(this.rand, opts.totalRows);<a name="line.1625"></a>
<span class="sourceLineNo">1626</span>    }<a name="line.1626"></a>
<span class="sourceLineNo">1627</span>  }<a name="line.1627"></a>
<span class="sourceLineNo">1628</span><a name="line.1628"></a>
<span class="sourceLineNo">1629</span>  static class AsyncScanTest extends AsyncTableTest {<a name="line.1629"></a>
<span class="sourceLineNo">1630</span>    private ResultScanner testScanner;<a name="line.1630"></a>
<span class="sourceLineNo">1631</span>    private AsyncTable&lt;?&gt; asyncTable;<a name="line.1631"></a>
<span class="sourceLineNo">1632</span><a name="line.1632"></a>
<span class="sourceLineNo">1633</span>    AsyncScanTest(AsyncConnection con, TestOptions options, Status status) {<a name="line.1633"></a>
<span class="sourceLineNo">1634</span>      super(con, options, status);<a name="line.1634"></a>
<span class="sourceLineNo">1635</span>    }<a name="line.1635"></a>
<span class="sourceLineNo">1636</span><a name="line.1636"></a>
<span class="sourceLineNo">1637</span>    @Override<a name="line.1637"></a>
<span class="sourceLineNo">1638</span>    void onStartup() throws IOException {<a name="line.1638"></a>
<span class="sourceLineNo">1639</span>      this.asyncTable = connection.getTable(TableName.valueOf(opts.tableName),<a name="line.1639"></a>
<span class="sourceLineNo">1640</span>        Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()));<a name="line.1640"></a>
<span class="sourceLineNo">1641</span>    }<a name="line.1641"></a>
<span class="sourceLineNo">1642</span><a name="line.1642"></a>
<span class="sourceLineNo">1643</span>    @Override<a name="line.1643"></a>
<span class="sourceLineNo">1644</span>    void testTakedown() throws IOException {<a name="line.1644"></a>
<span class="sourceLineNo">1645</span>      if (this.testScanner != null) {<a name="line.1645"></a>
<span class="sourceLineNo">1646</span>        updateScanMetrics(this.testScanner.getScanMetrics());<a name="line.1646"></a>
<span class="sourceLineNo">1647</span>        this.testScanner.close();<a name="line.1647"></a>
<span class="sourceLineNo">1648</span>      }<a name="line.1648"></a>
<span class="sourceLineNo">1649</span>      super.testTakedown();<a name="line.1649"></a>
<span class="sourceLineNo">1650</span>    }<a name="line.1650"></a>
<span class="sourceLineNo">1651</span><a name="line.1651"></a>
<span class="sourceLineNo">1652</span>    @Override<a name="line.1652"></a>
<span class="sourceLineNo">1653</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.1653"></a>
<span class="sourceLineNo">1654</span>      if (this.testScanner == null) {<a name="line.1654"></a>
<span class="sourceLineNo">1655</span>        Scan scan = new Scan().withStartRow(format(opts.startRow)).setCaching(opts.caching)<a name="line.1655"></a>
<span class="sourceLineNo">1656</span>          .setCacheBlocks(opts.cacheBlocks).setAsyncPrefetch(opts.asyncPrefetch)<a name="line.1656"></a>
<span class="sourceLineNo">1657</span>          .setReadType(opts.scanReadType).setScanMetricsEnabled(true);<a name="line.1657"></a>
<span class="sourceLineNo">1658</span>        for (int family = 0; family &lt; opts.families; family++) {<a name="line.1658"></a>
<span class="sourceLineNo">1659</span>          byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1659"></a>
<span class="sourceLineNo">1660</span>          if (opts.addColumns) {<a name="line.1660"></a>
<span class="sourceLineNo">1661</span>            for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1661"></a>
<span class="sourceLineNo">1662</span>              byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.1662"></a>
<span class="sourceLineNo">1663</span>              scan.addColumn(familyName, qualifier);<a name="line.1663"></a>
<span class="sourceLineNo">1664</span>            }<a name="line.1664"></a>
<span class="sourceLineNo">1665</span>          } else {<a name="line.1665"></a>
<span class="sourceLineNo">1666</span>            scan.addFamily(familyName);<a name="line.1666"></a>
<span class="sourceLineNo">1667</span>          }<a name="line.1667"></a>
<span class="sourceLineNo">1668</span>        }<a name="line.1668"></a>
<span class="sourceLineNo">1669</span>        if (opts.filterAll) {<a name="line.1669"></a>
<span class="sourceLineNo">1670</span>          scan.setFilter(new FilterAllFilter());<a name="line.1670"></a>
<span class="sourceLineNo">1671</span>        }<a name="line.1671"></a>
<span class="sourceLineNo">1672</span>        this.testScanner = asyncTable.getScanner(scan);<a name="line.1672"></a>
<span class="sourceLineNo">1673</span>      }<a name="line.1673"></a>
<span class="sourceLineNo">1674</span>      Result r = testScanner.next();<a name="line.1674"></a>
<span class="sourceLineNo">1675</span>      updateValueSize(r);<a name="line.1675"></a>
<span class="sourceLineNo">1676</span>      return true;<a name="line.1676"></a>
<span class="sourceLineNo">1677</span>    }<a name="line.1677"></a>
<span class="sourceLineNo">1678</span>  }<a name="line.1678"></a>
<span class="sourceLineNo">1679</span><a name="line.1679"></a>
<span class="sourceLineNo">1680</span>  static class AsyncSequentialReadTest extends AsyncTableTest {<a name="line.1680"></a>
<span class="sourceLineNo">1681</span>    AsyncSequentialReadTest(AsyncConnection con, TestOptions options, Status status) {<a name="line.1681"></a>
<span class="sourceLineNo">1682</span>      super(con, options, status);<a name="line.1682"></a>
<span class="sourceLineNo">1683</span>    }<a name="line.1683"></a>
<span class="sourceLineNo">1684</span><a name="line.1684"></a>
<span class="sourceLineNo">1685</span>    @Override<a name="line.1685"></a>
<span class="sourceLineNo">1686</span>    boolean testRow(final int i, final long startTime) throws IOException, InterruptedException {<a name="line.1686"></a>
<span class="sourceLineNo">1687</span>      Get get = new Get(format(i));<a name="line.1687"></a>
<span class="sourceLineNo">1688</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1688"></a>
<span class="sourceLineNo">1689</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1689"></a>
<span class="sourceLineNo">1690</span>        if (opts.addColumns) {<a name="line.1690"></a>
<span class="sourceLineNo">1691</span>          for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1691"></a>
<span class="sourceLineNo">1692</span>            byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.1692"></a>
<span class="sourceLineNo">1693</span>            get.addColumn(familyName, qualifier);<a name="line.1693"></a>
<span class="sourceLineNo">1694</span>          }<a name="line.1694"></a>
<span class="sourceLineNo">1695</span>        } else {<a name="line.1695"></a>
<span class="sourceLineNo">1696</span>          get.addFamily(familyName);<a name="line.1696"></a>
<span class="sourceLineNo">1697</span>        }<a name="line.1697"></a>
<span class="sourceLineNo">1698</span>      }<a name="line.1698"></a>
<span class="sourceLineNo">1699</span>      if (opts.filterAll) {<a name="line.1699"></a>
<span class="sourceLineNo">1700</span>        get.setFilter(new FilterAllFilter());<a name="line.1700"></a>
<span class="sourceLineNo">1701</span>      }<a name="line.1701"></a>
<span class="sourceLineNo">1702</span>      try {<a name="line.1702"></a>
<span class="sourceLineNo">1703</span>        updateValueSize(table.get(get).get());<a name="line.1703"></a>
<span class="sourceLineNo">1704</span>      } catch (ExecutionException e) {<a name="line.1704"></a>
<span class="sourceLineNo">1705</span>        throw new IOException(e);<a name="line.1705"></a>
<span class="sourceLineNo">1706</span>      }<a name="line.1706"></a>
<span class="sourceLineNo">1707</span>      return true;<a name="line.1707"></a>
<span class="sourceLineNo">1708</span>    }<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>  static class AsyncSequentialWriteTest extends AsyncTableTest {<a name="line.1711"></a>
<span class="sourceLineNo">1712</span>    private ArrayList&lt;Put&gt; puts;<a name="line.1712"></a>
<span class="sourceLineNo">1713</span><a name="line.1713"></a>
<span class="sourceLineNo">1714</span>    AsyncSequentialWriteTest(AsyncConnection con, TestOptions options, Status status) {<a name="line.1714"></a>
<span class="sourceLineNo">1715</span>      super(con, options, status);<a name="line.1715"></a>
<span class="sourceLineNo">1716</span>      if (opts.multiPut &gt; 0) {<a name="line.1716"></a>
<span class="sourceLineNo">1717</span>        LOG.info("MultiPut enabled. Sending PUTs in batches of " + opts.multiPut + ".");<a name="line.1717"></a>
<span class="sourceLineNo">1718</span>        this.puts = new ArrayList&lt;&gt;(opts.multiPut);<a name="line.1718"></a>
<span class="sourceLineNo">1719</span>      }<a name="line.1719"></a>
<span class="sourceLineNo">1720</span>    }<a name="line.1720"></a>
<span class="sourceLineNo">1721</span><a name="line.1721"></a>
<span class="sourceLineNo">1722</span>    protected byte[] generateRow(final int i) {<a name="line.1722"></a>
<span class="sourceLineNo">1723</span>      return format(i);<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>    @Override<a name="line.1726"></a>
<span class="sourceLineNo">1727</span>    @SuppressWarnings("ReturnValueIgnored")<a name="line.1727"></a>
<span class="sourceLineNo">1728</span>    boolean testRow(final int i, final long startTime) throws IOException, InterruptedException {<a name="line.1728"></a>
<span class="sourceLineNo">1729</span>      byte[] row = generateRow(i);<a name="line.1729"></a>
<span class="sourceLineNo">1730</span>      Put put = new Put(row);<a name="line.1730"></a>
<span class="sourceLineNo">1731</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1731"></a>
<span class="sourceLineNo">1732</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1732"></a>
<span class="sourceLineNo">1733</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1733"></a>
<span class="sourceLineNo">1734</span>          byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.1734"></a>
<span class="sourceLineNo">1735</span>          byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.1735"></a>
<span class="sourceLineNo">1736</span>          if (opts.useTags) {<a name="line.1736"></a>
<span class="sourceLineNo">1737</span>            byte[] tag = generateData(this.rand, TAG_LENGTH);<a name="line.1737"></a>
<span class="sourceLineNo">1738</span>            Tag[] tags = new Tag[opts.noOfTags];<a name="line.1738"></a>
<span class="sourceLineNo">1739</span>            for (int n = 0; n &lt; opts.noOfTags; n++) {<a name="line.1739"></a>
<span class="sourceLineNo">1740</span>              Tag t = new ArrayBackedTag((byte) n, tag);<a name="line.1740"></a>
<span class="sourceLineNo">1741</span>              tags[n] = t;<a name="line.1741"></a>
<span class="sourceLineNo">1742</span>            }<a name="line.1742"></a>
<span class="sourceLineNo">1743</span>            KeyValue kv =<a name="line.1743"></a>
<span class="sourceLineNo">1744</span>              new KeyValue(row, familyName, qualifier, HConstants.LATEST_TIMESTAMP, value, tags);<a name="line.1744"></a>
<span class="sourceLineNo">1745</span>            put.add(kv);<a name="line.1745"></a>
<span class="sourceLineNo">1746</span>            updateValueSize(kv.getValueLength());<a name="line.1746"></a>
<span class="sourceLineNo">1747</span>          } else {<a name="line.1747"></a>
<span class="sourceLineNo">1748</span>            put.addColumn(familyName, qualifier, value);<a name="line.1748"></a>
<span class="sourceLineNo">1749</span>            updateValueSize(value.length);<a name="line.1749"></a>
<span class="sourceLineNo">1750</span>          }<a name="line.1750"></a>
<span class="sourceLineNo">1751</span>        }<a name="line.1751"></a>
<span class="sourceLineNo">1752</span>      }<a name="line.1752"></a>
<span class="sourceLineNo">1753</span>      put.setDurability(opts.writeToWAL ? Durability.SYNC_WAL : Durability.SKIP_WAL);<a name="line.1753"></a>
<span class="sourceLineNo">1754</span>      try {<a name="line.1754"></a>
<span class="sourceLineNo">1755</span>        table.put(put).get();<a name="line.1755"></a>
<span class="sourceLineNo">1756</span>        if (opts.multiPut &gt; 0) {<a name="line.1756"></a>
<span class="sourceLineNo">1757</span>          this.puts.add(put);<a name="line.1757"></a>
<span class="sourceLineNo">1758</span>          if (this.puts.size() == opts.multiPut) {<a name="line.1758"></a>
<span class="sourceLineNo">1759</span>            this.table.put(puts).stream().map(f -&gt; AsyncRandomReadTest.propagate(f::get));<a name="line.1759"></a>
<span class="sourceLineNo">1760</span>            this.puts.clear();<a name="line.1760"></a>
<span class="sourceLineNo">1761</span>          } else {<a name="line.1761"></a>
<span class="sourceLineNo">1762</span>            return false;<a name="line.1762"></a>
<span class="sourceLineNo">1763</span>          }<a name="line.1763"></a>
<span class="sourceLineNo">1764</span>        } else {<a name="line.1764"></a>
<span class="sourceLineNo">1765</span>          table.put(put).get();<a name="line.1765"></a>
<span class="sourceLineNo">1766</span>        }<a name="line.1766"></a>
<span class="sourceLineNo">1767</span>      } catch (ExecutionException e) {<a name="line.1767"></a>
<span class="sourceLineNo">1768</span>        throw new IOException(e);<a name="line.1768"></a>
<span class="sourceLineNo">1769</span>      }<a name="line.1769"></a>
<span class="sourceLineNo">1770</span>      return true;<a name="line.1770"></a>
<span class="sourceLineNo">1771</span>    }<a name="line.1771"></a>
<span class="sourceLineNo">1772</span>  }<a name="line.1772"></a>
<span class="sourceLineNo">1773</span><a name="line.1773"></a>
<span class="sourceLineNo">1774</span>  static abstract class BufferedMutatorTest extends Test {<a name="line.1774"></a>
<span class="sourceLineNo">1775</span>    protected BufferedMutator mutator;<a name="line.1775"></a>
<span class="sourceLineNo">1776</span>    protected Table table;<a name="line.1776"></a>
<span class="sourceLineNo">1777</span><a name="line.1777"></a>
<span class="sourceLineNo">1778</span>    BufferedMutatorTest(Connection con, TestOptions options, Status status) {<a name="line.1778"></a>
<span class="sourceLineNo">1779</span>      super(con, options, status);<a name="line.1779"></a>
<span class="sourceLineNo">1780</span>    }<a name="line.1780"></a>
<span class="sourceLineNo">1781</span><a name="line.1781"></a>
<span class="sourceLineNo">1782</span>    @Override<a name="line.1782"></a>
<span class="sourceLineNo">1783</span>    void onStartup() throws IOException {<a name="line.1783"></a>
<span class="sourceLineNo">1784</span>      BufferedMutatorParams p = new BufferedMutatorParams(TableName.valueOf(opts.tableName));<a name="line.1784"></a>
<span class="sourceLineNo">1785</span>      p.writeBufferSize(opts.bufferSize);<a name="line.1785"></a>
<span class="sourceLineNo">1786</span>      this.mutator = connection.getBufferedMutator(p);<a name="line.1786"></a>
<span class="sourceLineNo">1787</span>      this.table = connection.getTable(TableName.valueOf(opts.tableName));<a name="line.1787"></a>
<span class="sourceLineNo">1788</span>    }<a name="line.1788"></a>
<span class="sourceLineNo">1789</span><a name="line.1789"></a>
<span class="sourceLineNo">1790</span>    @Override<a name="line.1790"></a>
<span class="sourceLineNo">1791</span>    void onTakedown() throws IOException {<a name="line.1791"></a>
<span class="sourceLineNo">1792</span>      mutator.close();<a name="line.1792"></a>
<span class="sourceLineNo">1793</span>      table.close();<a name="line.1793"></a>
<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
<span class="sourceLineNo">1795</span>  }<a name="line.1795"></a>
<span class="sourceLineNo">1796</span><a name="line.1796"></a>
<span class="sourceLineNo">1797</span>  static class RandomSeekScanTest extends TableTest {<a name="line.1797"></a>
<span class="sourceLineNo">1798</span>    RandomSeekScanTest(Connection con, TestOptions options, Status status) {<a name="line.1798"></a>
<span class="sourceLineNo">1799</span>      super(con, options, status);<a name="line.1799"></a>
<span class="sourceLineNo">1800</span>    }<a name="line.1800"></a>
<span class="sourceLineNo">1801</span><a name="line.1801"></a>
<span class="sourceLineNo">1802</span>    @Override<a name="line.1802"></a>
<span class="sourceLineNo">1803</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.1803"></a>
<span class="sourceLineNo">1804</span>      Scan scan =<a name="line.1804"></a>
<span class="sourceLineNo">1805</span>        new Scan().withStartRow(getRandomRow(this.rand, opts.totalRows)).setCaching(opts.caching)<a name="line.1805"></a>
<span class="sourceLineNo">1806</span>          .setCacheBlocks(opts.cacheBlocks).setAsyncPrefetch(opts.asyncPrefetch)<a name="line.1806"></a>
<span class="sourceLineNo">1807</span>          .setReadType(opts.scanReadType).setScanMetricsEnabled(true);<a name="line.1807"></a>
<span class="sourceLineNo">1808</span>      FilterList list = new FilterList();<a name="line.1808"></a>
<span class="sourceLineNo">1809</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1809"></a>
<span class="sourceLineNo">1810</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1810"></a>
<span class="sourceLineNo">1811</span>        if (opts.addColumns) {<a name="line.1811"></a>
<span class="sourceLineNo">1812</span>          for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1812"></a>
<span class="sourceLineNo">1813</span>            byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.1813"></a>
<span class="sourceLineNo">1814</span>            scan.addColumn(familyName, qualifier);<a name="line.1814"></a>
<span class="sourceLineNo">1815</span>          }<a name="line.1815"></a>
<span class="sourceLineNo">1816</span>        } else {<a name="line.1816"></a>
<span class="sourceLineNo">1817</span>          scan.addFamily(familyName);<a name="line.1817"></a>
<span class="sourceLineNo">1818</span>        }<a name="line.1818"></a>
<span class="sourceLineNo">1819</span>      }<a name="line.1819"></a>
<span class="sourceLineNo">1820</span>      if (opts.filterAll) {<a name="line.1820"></a>
<span class="sourceLineNo">1821</span>        list.addFilter(new FilterAllFilter());<a name="line.1821"></a>
<span class="sourceLineNo">1822</span>      }<a name="line.1822"></a>
<span class="sourceLineNo">1823</span>      list.addFilter(new WhileMatchFilter(new PageFilter(120)));<a name="line.1823"></a>
<span class="sourceLineNo">1824</span>      scan.setFilter(list);<a name="line.1824"></a>
<span class="sourceLineNo">1825</span>      ResultScanner s = this.table.getScanner(scan);<a name="line.1825"></a>
<span class="sourceLineNo">1826</span>      try {<a name="line.1826"></a>
<span class="sourceLineNo">1827</span>        for (Result rr; (rr = s.next()) != null;) {<a name="line.1827"></a>
<span class="sourceLineNo">1828</span>          updateValueSize(rr);<a name="line.1828"></a>
<span class="sourceLineNo">1829</span>        }<a name="line.1829"></a>
<span class="sourceLineNo">1830</span>      } finally {<a name="line.1830"></a>
<span class="sourceLineNo">1831</span>        updateScanMetrics(s.getScanMetrics());<a name="line.1831"></a>
<span class="sourceLineNo">1832</span>        s.close();<a name="line.1832"></a>
<span class="sourceLineNo">1833</span>      }<a name="line.1833"></a>
<span class="sourceLineNo">1834</span>      return true;<a name="line.1834"></a>
<span class="sourceLineNo">1835</span>    }<a name="line.1835"></a>
<span class="sourceLineNo">1836</span><a name="line.1836"></a>
<span class="sourceLineNo">1837</span>    @Override<a name="line.1837"></a>
<span class="sourceLineNo">1838</span>    protected int getReportingPeriod() {<a name="line.1838"></a>
<span class="sourceLineNo">1839</span>      int period = opts.perClientRunRows / 100;<a name="line.1839"></a>
<span class="sourceLineNo">1840</span>      return period == 0 ? opts.perClientRunRows : period;<a name="line.1840"></a>
<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
<span class="sourceLineNo">1842</span><a name="line.1842"></a>
<span class="sourceLineNo">1843</span>  }<a name="line.1843"></a>
<span class="sourceLineNo">1844</span><a name="line.1844"></a>
<span class="sourceLineNo">1845</span>  static abstract class RandomScanWithRangeTest extends TableTest {<a name="line.1845"></a>
<span class="sourceLineNo">1846</span>    RandomScanWithRangeTest(Connection con, TestOptions options, Status status) {<a name="line.1846"></a>
<span class="sourceLineNo">1847</span>      super(con, options, status);<a name="line.1847"></a>
<span class="sourceLineNo">1848</span>    }<a name="line.1848"></a>
<span class="sourceLineNo">1849</span><a name="line.1849"></a>
<span class="sourceLineNo">1850</span>    @Override<a name="line.1850"></a>
<span class="sourceLineNo">1851</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.1851"></a>
<span class="sourceLineNo">1852</span>      Pair&lt;byte[], byte[]&gt; startAndStopRow = getStartAndStopRow();<a name="line.1852"></a>
<span class="sourceLineNo">1853</span>      Scan scan = new Scan().withStartRow(startAndStopRow.getFirst())<a name="line.1853"></a>
<span class="sourceLineNo">1854</span>        .withStopRow(startAndStopRow.getSecond()).setCaching(opts.caching)<a name="line.1854"></a>
<span class="sourceLineNo">1855</span>        .setCacheBlocks(opts.cacheBlocks).setAsyncPrefetch(opts.asyncPrefetch)<a name="line.1855"></a>
<span class="sourceLineNo">1856</span>        .setReadType(opts.scanReadType).setScanMetricsEnabled(true);<a name="line.1856"></a>
<span class="sourceLineNo">1857</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1857"></a>
<span class="sourceLineNo">1858</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1858"></a>
<span class="sourceLineNo">1859</span>        if (opts.addColumns) {<a name="line.1859"></a>
<span class="sourceLineNo">1860</span>          for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1860"></a>
<span class="sourceLineNo">1861</span>            byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.1861"></a>
<span class="sourceLineNo">1862</span>            scan.addColumn(familyName, qualifier);<a name="line.1862"></a>
<span class="sourceLineNo">1863</span>          }<a name="line.1863"></a>
<span class="sourceLineNo">1864</span>        } else {<a name="line.1864"></a>
<span class="sourceLineNo">1865</span>          scan.addFamily(familyName);<a name="line.1865"></a>
<span class="sourceLineNo">1866</span>        }<a name="line.1866"></a>
<span class="sourceLineNo">1867</span>      }<a name="line.1867"></a>
<span class="sourceLineNo">1868</span>      if (opts.filterAll) {<a name="line.1868"></a>
<span class="sourceLineNo">1869</span>        scan.setFilter(new FilterAllFilter());<a name="line.1869"></a>
<span class="sourceLineNo">1870</span>      }<a name="line.1870"></a>
<span class="sourceLineNo">1871</span>      Result r = null;<a name="line.1871"></a>
<span class="sourceLineNo">1872</span>      int count = 0;<a name="line.1872"></a>
<span class="sourceLineNo">1873</span>      ResultScanner s = this.table.getScanner(scan);<a name="line.1873"></a>
<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
<span class="sourceLineNo">1875</span>        for (; (r = s.next()) != null;) {<a name="line.1875"></a>
<span class="sourceLineNo">1876</span>          updateValueSize(r);<a name="line.1876"></a>
<span class="sourceLineNo">1877</span>          count++;<a name="line.1877"></a>
<span class="sourceLineNo">1878</span>        }<a name="line.1878"></a>
<span class="sourceLineNo">1879</span>        if (i % 100 == 0) {<a name="line.1879"></a>
<span class="sourceLineNo">1880</span>          LOG.info(String.format("Scan for key range %s - %s returned %s rows",<a name="line.1880"></a>
<span class="sourceLineNo">1881</span>            Bytes.toString(startAndStopRow.getFirst()), Bytes.toString(startAndStopRow.getSecond()),<a name="line.1881"></a>
<span class="sourceLineNo">1882</span>            count));<a name="line.1882"></a>
<span class="sourceLineNo">1883</span>        }<a name="line.1883"></a>
<span class="sourceLineNo">1884</span>      } finally {<a name="line.1884"></a>
<span class="sourceLineNo">1885</span>        updateScanMetrics(s.getScanMetrics());<a name="line.1885"></a>
<span class="sourceLineNo">1886</span>        s.close();<a name="line.1886"></a>
<span class="sourceLineNo">1887</span>      }<a name="line.1887"></a>
<span class="sourceLineNo">1888</span>      return true;<a name="line.1888"></a>
<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
<span class="sourceLineNo">1890</span><a name="line.1890"></a>
<span class="sourceLineNo">1891</span>    protected abstract Pair&lt;byte[], byte[]&gt; getStartAndStopRow();<a name="line.1891"></a>
<span class="sourceLineNo">1892</span><a name="line.1892"></a>
<span class="sourceLineNo">1893</span>    protected Pair&lt;byte[], byte[]&gt; generateStartAndStopRows(int maxRange) {<a name="line.1893"></a>
<span class="sourceLineNo">1894</span>      int start = this.rand.nextInt(Integer.MAX_VALUE) % opts.totalRows;<a name="line.1894"></a>
<span class="sourceLineNo">1895</span>      int stop = start + maxRange;<a name="line.1895"></a>
<span class="sourceLineNo">1896</span>      return new Pair&lt;&gt;(format(start), format(stop));<a name="line.1896"></a>
<span class="sourceLineNo">1897</span>    }<a name="line.1897"></a>
<span class="sourceLineNo">1898</span><a name="line.1898"></a>
<span class="sourceLineNo">1899</span>    @Override<a name="line.1899"></a>
<span class="sourceLineNo">1900</span>    protected int getReportingPeriod() {<a name="line.1900"></a>
<span class="sourceLineNo">1901</span>      int period = opts.perClientRunRows / 100;<a name="line.1901"></a>
<span class="sourceLineNo">1902</span>      return period == 0 ? opts.perClientRunRows : period;<a name="line.1902"></a>
<span class="sourceLineNo">1903</span>    }<a name="line.1903"></a>
<span class="sourceLineNo">1904</span>  }<a name="line.1904"></a>
<span class="sourceLineNo">1905</span><a name="line.1905"></a>
<span class="sourceLineNo">1906</span>  static class RandomScanWithRange10Test extends RandomScanWithRangeTest {<a name="line.1906"></a>
<span class="sourceLineNo">1907</span>    RandomScanWithRange10Test(Connection con, TestOptions options, Status status) {<a name="line.1907"></a>
<span class="sourceLineNo">1908</span>      super(con, options, status);<a name="line.1908"></a>
<span class="sourceLineNo">1909</span>    }<a name="line.1909"></a>
<span class="sourceLineNo">1910</span><a name="line.1910"></a>
<span class="sourceLineNo">1911</span>    @Override<a name="line.1911"></a>
<span class="sourceLineNo">1912</span>    protected Pair&lt;byte[], byte[]&gt; getStartAndStopRow() {<a name="line.1912"></a>
<span class="sourceLineNo">1913</span>      return generateStartAndStopRows(10);<a name="line.1913"></a>
<span class="sourceLineNo">1914</span>    }<a name="line.1914"></a>
<span class="sourceLineNo">1915</span>  }<a name="line.1915"></a>
<span class="sourceLineNo">1916</span><a name="line.1916"></a>
<span class="sourceLineNo">1917</span>  static class RandomScanWithRange100Test extends RandomScanWithRangeTest {<a name="line.1917"></a>
<span class="sourceLineNo">1918</span>    RandomScanWithRange100Test(Connection con, TestOptions options, Status status) {<a name="line.1918"></a>
<span class="sourceLineNo">1919</span>      super(con, options, status);<a name="line.1919"></a>
<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
<span class="sourceLineNo">1921</span><a name="line.1921"></a>
<span class="sourceLineNo">1922</span>    @Override<a name="line.1922"></a>
<span class="sourceLineNo">1923</span>    protected Pair&lt;byte[], byte[]&gt; getStartAndStopRow() {<a name="line.1923"></a>
<span class="sourceLineNo">1924</span>      return generateStartAndStopRows(100);<a name="line.1924"></a>
<span class="sourceLineNo">1925</span>    }<a name="line.1925"></a>
<span class="sourceLineNo">1926</span>  }<a name="line.1926"></a>
<span class="sourceLineNo">1927</span><a name="line.1927"></a>
<span class="sourceLineNo">1928</span>  static class RandomScanWithRange1000Test extends RandomScanWithRangeTest {<a name="line.1928"></a>
<span class="sourceLineNo">1929</span>    RandomScanWithRange1000Test(Connection con, TestOptions options, Status status) {<a name="line.1929"></a>
<span class="sourceLineNo">1930</span>      super(con, options, status);<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>    @Override<a name="line.1933"></a>
<span class="sourceLineNo">1934</span>    protected Pair&lt;byte[], byte[]&gt; getStartAndStopRow() {<a name="line.1934"></a>
<span class="sourceLineNo">1935</span>      return generateStartAndStopRows(1000);<a name="line.1935"></a>
<span class="sourceLineNo">1936</span>    }<a name="line.1936"></a>
<span class="sourceLineNo">1937</span>  }<a name="line.1937"></a>
<span class="sourceLineNo">1938</span><a name="line.1938"></a>
<span class="sourceLineNo">1939</span>  static class RandomScanWithRange10000Test extends RandomScanWithRangeTest {<a name="line.1939"></a>
<span class="sourceLineNo">1940</span>    RandomScanWithRange10000Test(Connection con, TestOptions options, Status status) {<a name="line.1940"></a>
<span class="sourceLineNo">1941</span>      super(con, options, status);<a name="line.1941"></a>
<span class="sourceLineNo">1942</span>    }<a name="line.1942"></a>
<span class="sourceLineNo">1943</span><a name="line.1943"></a>
<span class="sourceLineNo">1944</span>    @Override<a name="line.1944"></a>
<span class="sourceLineNo">1945</span>    protected Pair&lt;byte[], byte[]&gt; getStartAndStopRow() {<a name="line.1945"></a>
<span class="sourceLineNo">1946</span>      return generateStartAndStopRows(10000);<a name="line.1946"></a>
<span class="sourceLineNo">1947</span>    }<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>  static class RandomReadTest extends TableTest {<a name="line.1950"></a>
<span class="sourceLineNo">1951</span>    private final Consistency consistency;<a name="line.1951"></a>
<span class="sourceLineNo">1952</span>    private ArrayList&lt;Get&gt; gets;<a name="line.1952"></a>
<span class="sourceLineNo">1953</span><a name="line.1953"></a>
<span class="sourceLineNo">1954</span>    RandomReadTest(Connection con, TestOptions options, Status status) {<a name="line.1954"></a>
<span class="sourceLineNo">1955</span>      super(con, options, status);<a name="line.1955"></a>
<span class="sourceLineNo">1956</span>      consistency = options.replicas == DEFAULT_OPTS.replicas ? null : Consistency.TIMELINE;<a name="line.1956"></a>
<span class="sourceLineNo">1957</span>      if (opts.multiGet &gt; 0) {<a name="line.1957"></a>
<span class="sourceLineNo">1958</span>        LOG.info("MultiGet enabled. Sending GETs in batches of " + opts.multiGet + ".");<a name="line.1958"></a>
<span class="sourceLineNo">1959</span>        this.gets = new ArrayList&lt;&gt;(opts.multiGet);<a name="line.1959"></a>
<span class="sourceLineNo">1960</span>      }<a name="line.1960"></a>
<span class="sourceLineNo">1961</span>    }<a name="line.1961"></a>
<span class="sourceLineNo">1962</span><a name="line.1962"></a>
<span class="sourceLineNo">1963</span>    @Override<a name="line.1963"></a>
<span class="sourceLineNo">1964</span>    boolean testRow(final int i, final long startTime) throws IOException, InterruptedException {<a name="line.1964"></a>
<span class="sourceLineNo">1965</span>      if (opts.randomSleep &gt; 0) {<a name="line.1965"></a>
<span class="sourceLineNo">1966</span>        Thread.sleep(ThreadLocalRandom.current().nextInt(opts.randomSleep));<a name="line.1966"></a>
<span class="sourceLineNo">1967</span>      }<a name="line.1967"></a>
<span class="sourceLineNo">1968</span>      Get get = new Get(getRandomRow(this.rand, opts.totalRows));<a name="line.1968"></a>
<span class="sourceLineNo">1969</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.1969"></a>
<span class="sourceLineNo">1970</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.1970"></a>
<span class="sourceLineNo">1971</span>        if (opts.addColumns) {<a name="line.1971"></a>
<span class="sourceLineNo">1972</span>          for (int column = 0; column &lt; opts.columns; column++) {<a name="line.1972"></a>
<span class="sourceLineNo">1973</span>            byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.1973"></a>
<span class="sourceLineNo">1974</span>            get.addColumn(familyName, qualifier);<a name="line.1974"></a>
<span class="sourceLineNo">1975</span>          }<a name="line.1975"></a>
<span class="sourceLineNo">1976</span>        } else {<a name="line.1976"></a>
<span class="sourceLineNo">1977</span>          get.addFamily(familyName);<a name="line.1977"></a>
<span class="sourceLineNo">1978</span>        }<a name="line.1978"></a>
<span class="sourceLineNo">1979</span>      }<a name="line.1979"></a>
<span class="sourceLineNo">1980</span>      if (opts.filterAll) {<a name="line.1980"></a>
<span class="sourceLineNo">1981</span>        get.setFilter(new FilterAllFilter());<a name="line.1981"></a>
<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
<span class="sourceLineNo">1983</span>      get.setConsistency(consistency);<a name="line.1983"></a>
<span class="sourceLineNo">1984</span>      if (LOG.isTraceEnabled()) LOG.trace(get.toString());<a name="line.1984"></a>
<span class="sourceLineNo">1985</span>      if (opts.multiGet &gt; 0) {<a name="line.1985"></a>
<span class="sourceLineNo">1986</span>        this.gets.add(get);<a name="line.1986"></a>
<span class="sourceLineNo">1987</span>        if (this.gets.size() == opts.multiGet) {<a name="line.1987"></a>
<span class="sourceLineNo">1988</span>          Result[] rs = this.table.get(this.gets);<a name="line.1988"></a>
<span class="sourceLineNo">1989</span>          if (opts.replicas &gt; 1) {<a name="line.1989"></a>
<span class="sourceLineNo">1990</span>            long latency = System.nanoTime() - startTime;<a name="line.1990"></a>
<span class="sourceLineNo">1991</span>            updateValueSize(rs, latency);<a name="line.1991"></a>
<span class="sourceLineNo">1992</span>          } else {<a name="line.1992"></a>
<span class="sourceLineNo">1993</span>            updateValueSize(rs);<a name="line.1993"></a>
<span class="sourceLineNo">1994</span>          }<a name="line.1994"></a>
<span class="sourceLineNo">1995</span>          this.gets.clear();<a name="line.1995"></a>
<span class="sourceLineNo">1996</span>        } else {<a name="line.1996"></a>
<span class="sourceLineNo">1997</span>          return false;<a name="line.1997"></a>
<span class="sourceLineNo">1998</span>        }<a name="line.1998"></a>
<span class="sourceLineNo">1999</span>      } else {<a name="line.1999"></a>
<span class="sourceLineNo">2000</span>        if (opts.replicas &gt; 1) {<a name="line.2000"></a>
<span class="sourceLineNo">2001</span>          Result r = this.table.get(get);<a name="line.2001"></a>
<span class="sourceLineNo">2002</span>          long latency = System.nanoTime() - startTime;<a name="line.2002"></a>
<span class="sourceLineNo">2003</span>          updateValueSize(r, latency);<a name="line.2003"></a>
<span class="sourceLineNo">2004</span>        } else {<a name="line.2004"></a>
<span class="sourceLineNo">2005</span>          updateValueSize(this.table.get(get));<a name="line.2005"></a>
<span class="sourceLineNo">2006</span>        }<a name="line.2006"></a>
<span class="sourceLineNo">2007</span>      }<a name="line.2007"></a>
<span class="sourceLineNo">2008</span>      return true;<a name="line.2008"></a>
<span class="sourceLineNo">2009</span>    }<a name="line.2009"></a>
<span class="sourceLineNo">2010</span><a name="line.2010"></a>
<span class="sourceLineNo">2011</span>    @Override<a name="line.2011"></a>
<span class="sourceLineNo">2012</span>    protected int getReportingPeriod() {<a name="line.2012"></a>
<span class="sourceLineNo">2013</span>      int period = opts.perClientRunRows / 10;<a name="line.2013"></a>
<span class="sourceLineNo">2014</span>      return period == 0 ? opts.perClientRunRows : period;<a name="line.2014"></a>
<span class="sourceLineNo">2015</span>    }<a name="line.2015"></a>
<span class="sourceLineNo">2016</span><a name="line.2016"></a>
<span class="sourceLineNo">2017</span>    @Override<a name="line.2017"></a>
<span class="sourceLineNo">2018</span>    protected void testTakedown() throws IOException {<a name="line.2018"></a>
<span class="sourceLineNo">2019</span>      if (this.gets != null &amp;&amp; this.gets.size() &gt; 0) {<a name="line.2019"></a>
<span class="sourceLineNo">2020</span>        this.table.get(gets);<a name="line.2020"></a>
<span class="sourceLineNo">2021</span>        this.gets.clear();<a name="line.2021"></a>
<span class="sourceLineNo">2022</span>      }<a name="line.2022"></a>
<span class="sourceLineNo">2023</span>      super.testTakedown();<a name="line.2023"></a>
<span class="sourceLineNo">2024</span>    }<a name="line.2024"></a>
<span class="sourceLineNo">2025</span>  }<a name="line.2025"></a>
<span class="sourceLineNo">2026</span><a name="line.2026"></a>
<span class="sourceLineNo">2027</span>  /*<a name="line.2027"></a>
<span class="sourceLineNo">2028</span>   * Send random reads against fake regions inserted by MetaWriteTest<a name="line.2028"></a>
<span class="sourceLineNo">2029</span>   */<a name="line.2029"></a>
<span class="sourceLineNo">2030</span>  static class MetaRandomReadTest extends MetaTest {<a name="line.2030"></a>
<span class="sourceLineNo">2031</span>    private RegionLocator regionLocator;<a name="line.2031"></a>
<span class="sourceLineNo">2032</span><a name="line.2032"></a>
<span class="sourceLineNo">2033</span>    MetaRandomReadTest(Connection con, TestOptions options, Status status) {<a name="line.2033"></a>
<span class="sourceLineNo">2034</span>      super(con, options, status);<a name="line.2034"></a>
<span class="sourceLineNo">2035</span>      LOG.info("call getRegionLocation");<a name="line.2035"></a>
<span class="sourceLineNo">2036</span>    }<a name="line.2036"></a>
<span class="sourceLineNo">2037</span><a name="line.2037"></a>
<span class="sourceLineNo">2038</span>    @Override<a name="line.2038"></a>
<span class="sourceLineNo">2039</span>    void onStartup() throws IOException {<a name="line.2039"></a>
<span class="sourceLineNo">2040</span>      super.onStartup();<a name="line.2040"></a>
<span class="sourceLineNo">2041</span>      this.regionLocator = connection.getRegionLocator(table.getName());<a name="line.2041"></a>
<span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
<span class="sourceLineNo">2043</span><a name="line.2043"></a>
<span class="sourceLineNo">2044</span>    @Override<a name="line.2044"></a>
<span class="sourceLineNo">2045</span>    boolean testRow(final int i, final long startTime) throws IOException, InterruptedException {<a name="line.2045"></a>
<span class="sourceLineNo">2046</span>      if (opts.randomSleep &gt; 0) {<a name="line.2046"></a>
<span class="sourceLineNo">2047</span>        Thread.sleep(rand.nextInt(opts.randomSleep));<a name="line.2047"></a>
<span class="sourceLineNo">2048</span>      }<a name="line.2048"></a>
<span class="sourceLineNo">2049</span>      HRegionLocation hRegionLocation =<a name="line.2049"></a>
<span class="sourceLineNo">2050</span>        regionLocator.getRegionLocation(getSplitKey(rand.nextInt(opts.perClientRunRows)), true);<a name="line.2050"></a>
<span class="sourceLineNo">2051</span>      LOG.debug("get location for region: " + hRegionLocation);<a name="line.2051"></a>
<span class="sourceLineNo">2052</span>      return true;<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>    @Override<a name="line.2055"></a>
<span class="sourceLineNo">2056</span>    protected int getReportingPeriod() {<a name="line.2056"></a>
<span class="sourceLineNo">2057</span>      int period = opts.perClientRunRows / 10;<a name="line.2057"></a>
<span class="sourceLineNo">2058</span>      return period == 0 ? opts.perClientRunRows : period;<a name="line.2058"></a>
<span class="sourceLineNo">2059</span>    }<a name="line.2059"></a>
<span class="sourceLineNo">2060</span><a name="line.2060"></a>
<span class="sourceLineNo">2061</span>    @Override<a name="line.2061"></a>
<span class="sourceLineNo">2062</span>    protected void testTakedown() throws IOException {<a name="line.2062"></a>
<span class="sourceLineNo">2063</span>      super.testTakedown();<a name="line.2063"></a>
<span class="sourceLineNo">2064</span>    }<a name="line.2064"></a>
<span class="sourceLineNo">2065</span>  }<a name="line.2065"></a>
<span class="sourceLineNo">2066</span><a name="line.2066"></a>
<span class="sourceLineNo">2067</span>  static class RandomWriteTest extends SequentialWriteTest {<a name="line.2067"></a>
<span class="sourceLineNo">2068</span>    RandomWriteTest(Connection con, TestOptions options, Status status) {<a name="line.2068"></a>
<span class="sourceLineNo">2069</span>      super(con, options, status);<a name="line.2069"></a>
<span class="sourceLineNo">2070</span>    }<a name="line.2070"></a>
<span class="sourceLineNo">2071</span><a name="line.2071"></a>
<span class="sourceLineNo">2072</span>    @Override<a name="line.2072"></a>
<span class="sourceLineNo">2073</span>    protected byte[] generateRow(final int i) {<a name="line.2073"></a>
<span class="sourceLineNo">2074</span>      return getRandomRow(this.rand, opts.totalRows);<a name="line.2074"></a>
<span class="sourceLineNo">2075</span>    }<a name="line.2075"></a>
<span class="sourceLineNo">2076</span><a name="line.2076"></a>
<span class="sourceLineNo">2077</span>  }<a name="line.2077"></a>
<span class="sourceLineNo">2078</span><a name="line.2078"></a>
<span class="sourceLineNo">2079</span>  static class RandomDeleteTest extends SequentialDeleteTest {<a name="line.2079"></a>
<span class="sourceLineNo">2080</span>    RandomDeleteTest(Connection con, TestOptions options, Status status) {<a name="line.2080"></a>
<span class="sourceLineNo">2081</span>      super(con, options, status);<a name="line.2081"></a>
<span class="sourceLineNo">2082</span>    }<a name="line.2082"></a>
<span class="sourceLineNo">2083</span><a name="line.2083"></a>
<span class="sourceLineNo">2084</span>    @Override<a name="line.2084"></a>
<span class="sourceLineNo">2085</span>    protected byte[] generateRow(final int i) {<a name="line.2085"></a>
<span class="sourceLineNo">2086</span>      return getRandomRow(this.rand, opts.totalRows);<a name="line.2086"></a>
<span class="sourceLineNo">2087</span>    }<a name="line.2087"></a>
<span class="sourceLineNo">2088</span><a name="line.2088"></a>
<span class="sourceLineNo">2089</span>  }<a name="line.2089"></a>
<span class="sourceLineNo">2090</span><a name="line.2090"></a>
<span class="sourceLineNo">2091</span>  static class ScanTest extends TableTest {<a name="line.2091"></a>
<span class="sourceLineNo">2092</span>    private ResultScanner testScanner;<a name="line.2092"></a>
<span class="sourceLineNo">2093</span><a name="line.2093"></a>
<span class="sourceLineNo">2094</span>    ScanTest(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 testTakedown() throws IOException {<a name="line.2099"></a>
<span class="sourceLineNo">2100</span>      if (this.testScanner != null) {<a name="line.2100"></a>
<span class="sourceLineNo">2101</span>        this.testScanner.close();<a name="line.2101"></a>
<span class="sourceLineNo">2102</span>      }<a name="line.2102"></a>
<span class="sourceLineNo">2103</span>      super.testTakedown();<a name="line.2103"></a>
<span class="sourceLineNo">2104</span>    }<a name="line.2104"></a>
<span class="sourceLineNo">2105</span><a name="line.2105"></a>
<span class="sourceLineNo">2106</span>    @Override<a name="line.2106"></a>
<span class="sourceLineNo">2107</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.2107"></a>
<span class="sourceLineNo">2108</span>      if (this.testScanner == null) {<a name="line.2108"></a>
<span class="sourceLineNo">2109</span>        Scan scan = new Scan().withStartRow(format(opts.startRow)).setCaching(opts.caching)<a name="line.2109"></a>
<span class="sourceLineNo">2110</span>          .setCacheBlocks(opts.cacheBlocks).setAsyncPrefetch(opts.asyncPrefetch)<a name="line.2110"></a>
<span class="sourceLineNo">2111</span>          .setReadType(opts.scanReadType).setScanMetricsEnabled(true);<a name="line.2111"></a>
<span class="sourceLineNo">2112</span>        for (int family = 0; family &lt; opts.families; family++) {<a name="line.2112"></a>
<span class="sourceLineNo">2113</span>          byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.2113"></a>
<span class="sourceLineNo">2114</span>          if (opts.addColumns) {<a name="line.2114"></a>
<span class="sourceLineNo">2115</span>            for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2115"></a>
<span class="sourceLineNo">2116</span>              byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.2116"></a>
<span class="sourceLineNo">2117</span>              scan.addColumn(familyName, qualifier);<a name="line.2117"></a>
<span class="sourceLineNo">2118</span>            }<a name="line.2118"></a>
<span class="sourceLineNo">2119</span>          } else {<a name="line.2119"></a>
<span class="sourceLineNo">2120</span>            scan.addFamily(familyName);<a name="line.2120"></a>
<span class="sourceLineNo">2121</span>          }<a name="line.2121"></a>
<span class="sourceLineNo">2122</span>        }<a name="line.2122"></a>
<span class="sourceLineNo">2123</span>        if (opts.filterAll) {<a name="line.2123"></a>
<span class="sourceLineNo">2124</span>          scan.setFilter(new FilterAllFilter());<a name="line.2124"></a>
<span class="sourceLineNo">2125</span>        }<a name="line.2125"></a>
<span class="sourceLineNo">2126</span>        this.testScanner = table.getScanner(scan);<a name="line.2126"></a>
<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
<span class="sourceLineNo">2128</span>      Result r = testScanner.next();<a name="line.2128"></a>
<span class="sourceLineNo">2129</span>      updateValueSize(r);<a name="line.2129"></a>
<span class="sourceLineNo">2130</span>      return true;<a name="line.2130"></a>
<span class="sourceLineNo">2131</span>    }<a name="line.2131"></a>
<span class="sourceLineNo">2132</span>  }<a name="line.2132"></a>
<span class="sourceLineNo">2133</span><a name="line.2133"></a>
<span class="sourceLineNo">2134</span>  static class ReverseScanTest extends TableTest {<a name="line.2134"></a>
<span class="sourceLineNo">2135</span>    private ResultScanner testScanner;<a name="line.2135"></a>
<span class="sourceLineNo">2136</span><a name="line.2136"></a>
<span class="sourceLineNo">2137</span>    ReverseScanTest(Connection con, TestOptions options, Status status) {<a name="line.2137"></a>
<span class="sourceLineNo">2138</span>      super(con, options, status);<a name="line.2138"></a>
<span class="sourceLineNo">2139</span>    }<a name="line.2139"></a>
<span class="sourceLineNo">2140</span><a name="line.2140"></a>
<span class="sourceLineNo">2141</span>    @Override<a name="line.2141"></a>
<span class="sourceLineNo">2142</span>    void testTakedown() throws IOException {<a name="line.2142"></a>
<span class="sourceLineNo">2143</span>      if (this.testScanner != null) {<a name="line.2143"></a>
<span class="sourceLineNo">2144</span>        this.testScanner.close();<a name="line.2144"></a>
<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
<span class="sourceLineNo">2146</span>      super.testTakedown();<a name="line.2146"></a>
<span class="sourceLineNo">2147</span>    }<a name="line.2147"></a>
<span class="sourceLineNo">2148</span><a name="line.2148"></a>
<span class="sourceLineNo">2149</span>    @Override<a name="line.2149"></a>
<span class="sourceLineNo">2150</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.2150"></a>
<span class="sourceLineNo">2151</span>      if (this.testScanner == null) {<a name="line.2151"></a>
<span class="sourceLineNo">2152</span>        Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2152"></a>
<span class="sourceLineNo">2153</span>          .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2153"></a>
<span class="sourceLineNo">2154</span>          .setScanMetricsEnabled(true).setReversed(true);<a name="line.2154"></a>
<span class="sourceLineNo">2155</span>        for (int family = 0; family &lt; opts.families; family++) {<a name="line.2155"></a>
<span class="sourceLineNo">2156</span>          byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.2156"></a>
<span class="sourceLineNo">2157</span>          if (opts.addColumns) {<a name="line.2157"></a>
<span class="sourceLineNo">2158</span>            for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2158"></a>
<span class="sourceLineNo">2159</span>              byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.2159"></a>
<span class="sourceLineNo">2160</span>              scan.addColumn(familyName, qualifier);<a name="line.2160"></a>
<span class="sourceLineNo">2161</span>            }<a name="line.2161"></a>
<span class="sourceLineNo">2162</span>          } else {<a name="line.2162"></a>
<span class="sourceLineNo">2163</span>            scan.addFamily(familyName);<a name="line.2163"></a>
<span class="sourceLineNo">2164</span>          }<a name="line.2164"></a>
<span class="sourceLineNo">2165</span>        }<a name="line.2165"></a>
<span class="sourceLineNo">2166</span>        if (opts.filterAll) {<a name="line.2166"></a>
<span class="sourceLineNo">2167</span>          scan.setFilter(new FilterAllFilter());<a name="line.2167"></a>
<span class="sourceLineNo">2168</span>        }<a name="line.2168"></a>
<span class="sourceLineNo">2169</span>        this.testScanner = table.getScanner(scan);<a name="line.2169"></a>
<span class="sourceLineNo">2170</span>      }<a name="line.2170"></a>
<span class="sourceLineNo">2171</span>      Result r = testScanner.next();<a name="line.2171"></a>
<span class="sourceLineNo">2172</span>      updateValueSize(r);<a name="line.2172"></a>
<span class="sourceLineNo">2173</span>      return true;<a name="line.2173"></a>
<span class="sourceLineNo">2174</span>    }<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>   * Base class for operations that are CAS-like; that read a value and then set it based off what<a name="line.2178"></a>
<span class="sourceLineNo">2179</span>   * they read. In this category is increment, append, checkAndPut, etc.<a name="line.2179"></a>
<span class="sourceLineNo">2180</span>   * &lt;p&gt;<a name="line.2180"></a>
<span class="sourceLineNo">2181</span>   * These operations also want some concurrency going on. Usually when these tests run, they<a name="line.2181"></a>
<span class="sourceLineNo">2182</span>   * operate in their own part of the key range. In CASTest, we will have them all overlap on the<a name="line.2182"></a>
<span class="sourceLineNo">2183</span>   * same key space. We do this with our getStartRow and getLastRow overrides.<a name="line.2183"></a>
<span class="sourceLineNo">2184</span>   */<a name="line.2184"></a>
<span class="sourceLineNo">2185</span>  static abstract class CASTableTest extends TableTest {<a name="line.2185"></a>
<span class="sourceLineNo">2186</span>    private final byte[] qualifier;<a name="line.2186"></a>
<span class="sourceLineNo">2187</span><a name="line.2187"></a>
<span class="sourceLineNo">2188</span>    CASTableTest(Connection con, TestOptions options, Status status) {<a name="line.2188"></a>
<span class="sourceLineNo">2189</span>      super(con, options, status);<a name="line.2189"></a>
<span class="sourceLineNo">2190</span>      qualifier = Bytes.toBytes(this.getClass().getSimpleName());<a name="line.2190"></a>
<span class="sourceLineNo">2191</span>    }<a name="line.2191"></a>
<span class="sourceLineNo">2192</span><a name="line.2192"></a>
<span class="sourceLineNo">2193</span>    byte[] getQualifier() {<a name="line.2193"></a>
<span class="sourceLineNo">2194</span>      return this.qualifier;<a name="line.2194"></a>
<span class="sourceLineNo">2195</span>    }<a name="line.2195"></a>
<span class="sourceLineNo">2196</span><a name="line.2196"></a>
<span class="sourceLineNo">2197</span>    @Override<a name="line.2197"></a>
<span class="sourceLineNo">2198</span>    int getStartRow() {<a name="line.2198"></a>
<span class="sourceLineNo">2199</span>      return 0;<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>    @Override<a name="line.2202"></a>
<span class="sourceLineNo">2203</span>    int getLastRow() {<a name="line.2203"></a>
<span class="sourceLineNo">2204</span>      return opts.perClientRunRows;<a name="line.2204"></a>
<span class="sourceLineNo">2205</span>    }<a name="line.2205"></a>
<span class="sourceLineNo">2206</span>  }<a name="line.2206"></a>
<span class="sourceLineNo">2207</span><a name="line.2207"></a>
<span class="sourceLineNo">2208</span>  static class IncrementTest extends CASTableTest {<a name="line.2208"></a>
<span class="sourceLineNo">2209</span>    IncrementTest(Connection con, TestOptions options, Status status) {<a name="line.2209"></a>
<span class="sourceLineNo">2210</span>      super(con, options, status);<a name="line.2210"></a>
<span class="sourceLineNo">2211</span>    }<a name="line.2211"></a>
<span class="sourceLineNo">2212</span><a name="line.2212"></a>
<span class="sourceLineNo">2213</span>    @Override<a name="line.2213"></a>
<span class="sourceLineNo">2214</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.2214"></a>
<span class="sourceLineNo">2215</span>      Increment increment = new Increment(format(i));<a name="line.2215"></a>
<span class="sourceLineNo">2216</span>      // unlike checkAndXXX tests, which make most sense to do on a single value,<a name="line.2216"></a>
<span class="sourceLineNo">2217</span>      // if multiple families are specified for an increment test we assume it is<a name="line.2217"></a>
<span class="sourceLineNo">2218</span>      // meant to raise the work factor<a name="line.2218"></a>
<span class="sourceLineNo">2219</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.2219"></a>
<span class="sourceLineNo">2220</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.2220"></a>
<span class="sourceLineNo">2221</span>        increment.addColumn(familyName, getQualifier(), 1l);<a name="line.2221"></a>
<span class="sourceLineNo">2222</span>      }<a name="line.2222"></a>
<span class="sourceLineNo">2223</span>      updateValueSize(this.table.increment(increment));<a name="line.2223"></a>
<span class="sourceLineNo">2224</span>      return true;<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>  static class AppendTest extends CASTableTest {<a name="line.2228"></a>
<span class="sourceLineNo">2229</span>    AppendTest(Connection con, TestOptions options, Status status) {<a name="line.2229"></a>
<span class="sourceLineNo">2230</span>      super(con, options, status);<a name="line.2230"></a>
<span class="sourceLineNo">2231</span>    }<a name="line.2231"></a>
<span class="sourceLineNo">2232</span><a name="line.2232"></a>
<span class="sourceLineNo">2233</span>    @Override<a name="line.2233"></a>
<span class="sourceLineNo">2234</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.2234"></a>
<span class="sourceLineNo">2235</span>      byte[] bytes = format(i);<a name="line.2235"></a>
<span class="sourceLineNo">2236</span>      Append append = new Append(bytes);<a name="line.2236"></a>
<span class="sourceLineNo">2237</span>      // unlike checkAndXXX tests, which make most sense to do on a single value,<a name="line.2237"></a>
<span class="sourceLineNo">2238</span>      // if multiple families are specified for an append test we assume it is<a name="line.2238"></a>
<span class="sourceLineNo">2239</span>      // meant to raise the work factor<a name="line.2239"></a>
<span class="sourceLineNo">2240</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.2240"></a>
<span class="sourceLineNo">2241</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.2241"></a>
<span class="sourceLineNo">2242</span>        append.addColumn(familyName, getQualifier(), bytes);<a name="line.2242"></a>
<span class="sourceLineNo">2243</span>      }<a name="line.2243"></a>
<span class="sourceLineNo">2244</span>      updateValueSize(this.table.append(append));<a name="line.2244"></a>
<span class="sourceLineNo">2245</span>      return true;<a name="line.2245"></a>
<span class="sourceLineNo">2246</span>    }<a name="line.2246"></a>
<span class="sourceLineNo">2247</span>  }<a name="line.2247"></a>
<span class="sourceLineNo">2248</span><a name="line.2248"></a>
<span class="sourceLineNo">2249</span>  static class CheckAndMutateTest extends CASTableTest {<a name="line.2249"></a>
<span class="sourceLineNo">2250</span>    CheckAndMutateTest(Connection con, TestOptions options, Status status) {<a name="line.2250"></a>
<span class="sourceLineNo">2251</span>      super(con, options, status);<a name="line.2251"></a>
<span class="sourceLineNo">2252</span>    }<a name="line.2252"></a>
<span class="sourceLineNo">2253</span><a name="line.2253"></a>
<span class="sourceLineNo">2254</span>    @Override<a name="line.2254"></a>
<span class="sourceLineNo">2255</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.2255"></a>
<span class="sourceLineNo">2256</span>      final byte[] bytes = format(i);<a name="line.2256"></a>
<span class="sourceLineNo">2257</span>      // checkAndXXX tests operate on only a single value<a name="line.2257"></a>
<span class="sourceLineNo">2258</span>      // Put a known value so when we go to check it, it is there.<a name="line.2258"></a>
<span class="sourceLineNo">2259</span>      Put put = new Put(bytes);<a name="line.2259"></a>
<span class="sourceLineNo">2260</span>      put.addColumn(FAMILY_ZERO, getQualifier(), bytes);<a name="line.2260"></a>
<span class="sourceLineNo">2261</span>      this.table.put(put);<a name="line.2261"></a>
<span class="sourceLineNo">2262</span>      RowMutations mutations = new RowMutations(bytes);<a name="line.2262"></a>
<span class="sourceLineNo">2263</span>      mutations.add(put);<a name="line.2263"></a>
<span class="sourceLineNo">2264</span>      this.table.checkAndMutate(bytes, FAMILY_ZERO).qualifier(getQualifier()).ifEquals(bytes)<a name="line.2264"></a>
<span class="sourceLineNo">2265</span>        .thenMutate(mutations);<a name="line.2265"></a>
<span class="sourceLineNo">2266</span>      return true;<a name="line.2266"></a>
<span class="sourceLineNo">2267</span>    }<a name="line.2267"></a>
<span class="sourceLineNo">2268</span>  }<a name="line.2268"></a>
<span class="sourceLineNo">2269</span><a name="line.2269"></a>
<span class="sourceLineNo">2270</span>  static class CheckAndPutTest extends CASTableTest {<a name="line.2270"></a>
<span class="sourceLineNo">2271</span>    CheckAndPutTest(Connection con, TestOptions options, Status status) {<a name="line.2271"></a>
<span class="sourceLineNo">2272</span>      super(con, options, status);<a name="line.2272"></a>
<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
<span class="sourceLineNo">2274</span><a name="line.2274"></a>
<span class="sourceLineNo">2275</span>    @Override<a name="line.2275"></a>
<span class="sourceLineNo">2276</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.2276"></a>
<span class="sourceLineNo">2277</span>      final byte[] bytes = format(i);<a name="line.2277"></a>
<span class="sourceLineNo">2278</span>      // checkAndXXX tests operate on only a single value<a name="line.2278"></a>
<span class="sourceLineNo">2279</span>      // Put a known value so when we go to check it, it is there.<a name="line.2279"></a>
<span class="sourceLineNo">2280</span>      Put put = new Put(bytes);<a name="line.2280"></a>
<span class="sourceLineNo">2281</span>      put.addColumn(FAMILY_ZERO, getQualifier(), bytes);<a name="line.2281"></a>
<span class="sourceLineNo">2282</span>      this.table.put(put);<a name="line.2282"></a>
<span class="sourceLineNo">2283</span>      this.table.checkAndMutate(bytes, FAMILY_ZERO).qualifier(getQualifier()).ifEquals(bytes)<a name="line.2283"></a>
<span class="sourceLineNo">2284</span>        .thenPut(put);<a name="line.2284"></a>
<span class="sourceLineNo">2285</span>      return true;<a name="line.2285"></a>
<span class="sourceLineNo">2286</span>    }<a name="line.2286"></a>
<span class="sourceLineNo">2287</span>  }<a name="line.2287"></a>
<span class="sourceLineNo">2288</span><a name="line.2288"></a>
<span class="sourceLineNo">2289</span>  static class CheckAndDeleteTest extends CASTableTest {<a name="line.2289"></a>
<span class="sourceLineNo">2290</span>    CheckAndDeleteTest(Connection con, TestOptions options, Status status) {<a name="line.2290"></a>
<span class="sourceLineNo">2291</span>      super(con, options, status);<a name="line.2291"></a>
<span class="sourceLineNo">2292</span>    }<a name="line.2292"></a>
<span class="sourceLineNo">2293</span><a name="line.2293"></a>
<span class="sourceLineNo">2294</span>    @Override<a name="line.2294"></a>
<span class="sourceLineNo">2295</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.2295"></a>
<span class="sourceLineNo">2296</span>      final byte[] bytes = format(i);<a name="line.2296"></a>
<span class="sourceLineNo">2297</span>      // checkAndXXX tests operate on only a single value<a name="line.2297"></a>
<span class="sourceLineNo">2298</span>      // Put a known value so when we go to check it, it is there.<a name="line.2298"></a>
<span class="sourceLineNo">2299</span>      Put put = new Put(bytes);<a name="line.2299"></a>
<span class="sourceLineNo">2300</span>      put.addColumn(FAMILY_ZERO, getQualifier(), bytes);<a name="line.2300"></a>
<span class="sourceLineNo">2301</span>      this.table.put(put);<a name="line.2301"></a>
<span class="sourceLineNo">2302</span>      Delete delete = new Delete(put.getRow());<a name="line.2302"></a>
<span class="sourceLineNo">2303</span>      delete.addColumn(FAMILY_ZERO, getQualifier());<a name="line.2303"></a>
<span class="sourceLineNo">2304</span>      this.table.checkAndMutate(bytes, FAMILY_ZERO).qualifier(getQualifier()).ifEquals(bytes)<a name="line.2304"></a>
<span class="sourceLineNo">2305</span>        .thenDelete(delete);<a name="line.2305"></a>
<span class="sourceLineNo">2306</span>      return true;<a name="line.2306"></a>
<span class="sourceLineNo">2307</span>    }<a name="line.2307"></a>
<span class="sourceLineNo">2308</span>  }<a name="line.2308"></a>
<span class="sourceLineNo">2309</span><a name="line.2309"></a>
<span class="sourceLineNo">2310</span>  /*<a name="line.2310"></a>
<span class="sourceLineNo">2311</span>   * Delete all fake regions inserted to meta table by MetaWriteTest.<a name="line.2311"></a>
<span class="sourceLineNo">2312</span>   */<a name="line.2312"></a>
<span class="sourceLineNo">2313</span>  static class CleanMetaTest extends MetaTest {<a name="line.2313"></a>
<span class="sourceLineNo">2314</span>    CleanMetaTest(Connection con, TestOptions options, Status status) {<a name="line.2314"></a>
<span class="sourceLineNo">2315</span>      super(con, options, status);<a name="line.2315"></a>
<span class="sourceLineNo">2316</span>    }<a name="line.2316"></a>
<span class="sourceLineNo">2317</span><a name="line.2317"></a>
<span class="sourceLineNo">2318</span>    @Override<a name="line.2318"></a>
<span class="sourceLineNo">2319</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.2319"></a>
<span class="sourceLineNo">2320</span>      try {<a name="line.2320"></a>
<span class="sourceLineNo">2321</span>        RegionInfo regionInfo = connection.getRegionLocator(table.getName())<a name="line.2321"></a>
<span class="sourceLineNo">2322</span>          .getRegionLocation(getSplitKey(i), false).getRegion();<a name="line.2322"></a>
<span class="sourceLineNo">2323</span>        LOG.debug("deleting region from meta: " + regionInfo);<a name="line.2323"></a>
<span class="sourceLineNo">2324</span><a name="line.2324"></a>
<span class="sourceLineNo">2325</span>        Delete delete =<a name="line.2325"></a>
<span class="sourceLineNo">2326</span>          MetaTableAccessor.makeDeleteFromRegionInfo(regionInfo, HConstants.LATEST_TIMESTAMP);<a name="line.2326"></a>
<span class="sourceLineNo">2327</span>        try (Table t = MetaTableAccessor.getMetaHTable(connection)) {<a name="line.2327"></a>
<span class="sourceLineNo">2328</span>          t.delete(delete);<a name="line.2328"></a>
<span class="sourceLineNo">2329</span>        }<a name="line.2329"></a>
<span class="sourceLineNo">2330</span>      } catch (IOException ie) {<a name="line.2330"></a>
<span class="sourceLineNo">2331</span>        // Log and continue<a name="line.2331"></a>
<span class="sourceLineNo">2332</span>        LOG.error("cannot find region with start key: " + i);<a name="line.2332"></a>
<span class="sourceLineNo">2333</span>      }<a name="line.2333"></a>
<span class="sourceLineNo">2334</span>      return true;<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><a name="line.2337"></a>
<span class="sourceLineNo">2338</span>  static class SequentialReadTest extends TableTest {<a name="line.2338"></a>
<span class="sourceLineNo">2339</span>    SequentialReadTest(Connection con, TestOptions options, Status status) {<a name="line.2339"></a>
<span class="sourceLineNo">2340</span>      super(con, options, status);<a name="line.2340"></a>
<span class="sourceLineNo">2341</span>    }<a name="line.2341"></a>
<span class="sourceLineNo">2342</span><a name="line.2342"></a>
<span class="sourceLineNo">2343</span>    @Override<a name="line.2343"></a>
<span class="sourceLineNo">2344</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.2344"></a>
<span class="sourceLineNo">2345</span>      Get get = new Get(format(i));<a name="line.2345"></a>
<span class="sourceLineNo">2346</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.2346"></a>
<span class="sourceLineNo">2347</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.2347"></a>
<span class="sourceLineNo">2348</span>        if (opts.addColumns) {<a name="line.2348"></a>
<span class="sourceLineNo">2349</span>          for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2349"></a>
<span class="sourceLineNo">2350</span>            byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.2350"></a>
<span class="sourceLineNo">2351</span>            get.addColumn(familyName, qualifier);<a name="line.2351"></a>
<span class="sourceLineNo">2352</span>          }<a name="line.2352"></a>
<span class="sourceLineNo">2353</span>        } else {<a name="line.2353"></a>
<span class="sourceLineNo">2354</span>          get.addFamily(familyName);<a name="line.2354"></a>
<span class="sourceLineNo">2355</span>        }<a name="line.2355"></a>
<span class="sourceLineNo">2356</span>      }<a name="line.2356"></a>
<span class="sourceLineNo">2357</span>      if (opts.filterAll) {<a name="line.2357"></a>
<span class="sourceLineNo">2358</span>        get.setFilter(new FilterAllFilter());<a name="line.2358"></a>
<span class="sourceLineNo">2359</span>      }<a name="line.2359"></a>
<span class="sourceLineNo">2360</span>      updateValueSize(table.get(get));<a name="line.2360"></a>
<span class="sourceLineNo">2361</span>      return true;<a name="line.2361"></a>
<span class="sourceLineNo">2362</span>    }<a name="line.2362"></a>
<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
<span class="sourceLineNo">2364</span><a name="line.2364"></a>
<span class="sourceLineNo">2365</span>  static class SequentialWriteTest extends BufferedMutatorTest {<a name="line.2365"></a>
<span class="sourceLineNo">2366</span>    private ArrayList&lt;Put&gt; puts;<a name="line.2366"></a>
<span class="sourceLineNo">2367</span><a name="line.2367"></a>
<span class="sourceLineNo">2368</span>    SequentialWriteTest(Connection con, TestOptions options, Status status) {<a name="line.2368"></a>
<span class="sourceLineNo">2369</span>      super(con, options, status);<a name="line.2369"></a>
<span class="sourceLineNo">2370</span>      if (opts.multiPut &gt; 0) {<a name="line.2370"></a>
<span class="sourceLineNo">2371</span>        LOG.info("MultiPut enabled. Sending PUTs in batches of " + opts.multiPut + ".");<a name="line.2371"></a>
<span class="sourceLineNo">2372</span>        this.puts = new ArrayList&lt;&gt;(opts.multiPut);<a name="line.2372"></a>
<span class="sourceLineNo">2373</span>      }<a name="line.2373"></a>
<span class="sourceLineNo">2374</span>    }<a name="line.2374"></a>
<span class="sourceLineNo">2375</span><a name="line.2375"></a>
<span class="sourceLineNo">2376</span>    protected byte[] generateRow(final int i) {<a name="line.2376"></a>
<span class="sourceLineNo">2377</span>      return format(i);<a name="line.2377"></a>
<span class="sourceLineNo">2378</span>    }<a name="line.2378"></a>
<span class="sourceLineNo">2379</span><a name="line.2379"></a>
<span class="sourceLineNo">2380</span>    @Override<a name="line.2380"></a>
<span class="sourceLineNo">2381</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.2381"></a>
<span class="sourceLineNo">2382</span>      byte[] row = generateRow(i);<a name="line.2382"></a>
<span class="sourceLineNo">2383</span>      Put put = new Put(row);<a name="line.2383"></a>
<span class="sourceLineNo">2384</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.2384"></a>
<span class="sourceLineNo">2385</span>        byte familyName[] = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.2385"></a>
<span class="sourceLineNo">2386</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2386"></a>
<span class="sourceLineNo">2387</span>          byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.2387"></a>
<span class="sourceLineNo">2388</span>          byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2388"></a>
<span class="sourceLineNo">2389</span>          if (opts.useTags) {<a name="line.2389"></a>
<span class="sourceLineNo">2390</span>            byte[] tag = generateData(this.rand, TAG_LENGTH);<a name="line.2390"></a>
<span class="sourceLineNo">2391</span>            Tag[] tags = new Tag[opts.noOfTags];<a name="line.2391"></a>
<span class="sourceLineNo">2392</span>            for (int n = 0; n &lt; opts.noOfTags; n++) {<a name="line.2392"></a>
<span class="sourceLineNo">2393</span>              Tag t = new ArrayBackedTag((byte) n, tag);<a name="line.2393"></a>
<span class="sourceLineNo">2394</span>              tags[n] = t;<a name="line.2394"></a>
<span class="sourceLineNo">2395</span>            }<a name="line.2395"></a>
<span class="sourceLineNo">2396</span>            KeyValue kv =<a name="line.2396"></a>
<span class="sourceLineNo">2397</span>              new KeyValue(row, familyName, qualifier, HConstants.LATEST_TIMESTAMP, value, tags);<a name="line.2397"></a>
<span class="sourceLineNo">2398</span>            put.add(kv);<a name="line.2398"></a>
<span class="sourceLineNo">2399</span>            updateValueSize(kv.getValueLength());<a name="line.2399"></a>
<span class="sourceLineNo">2400</span>          } else {<a name="line.2400"></a>
<span class="sourceLineNo">2401</span>            put.addColumn(familyName, qualifier, value);<a name="line.2401"></a>
<span class="sourceLineNo">2402</span>            updateValueSize(value.length);<a name="line.2402"></a>
<span class="sourceLineNo">2403</span>          }<a name="line.2403"></a>
<span class="sourceLineNo">2404</span>        }<a name="line.2404"></a>
<span class="sourceLineNo">2405</span>      }<a name="line.2405"></a>
<span class="sourceLineNo">2406</span>      put.setDurability(opts.writeToWAL ? Durability.SYNC_WAL : Durability.SKIP_WAL);<a name="line.2406"></a>
<span class="sourceLineNo">2407</span>      if (opts.autoFlush) {<a name="line.2407"></a>
<span class="sourceLineNo">2408</span>        if (opts.multiPut &gt; 0) {<a name="line.2408"></a>
<span class="sourceLineNo">2409</span>          this.puts.add(put);<a name="line.2409"></a>
<span class="sourceLineNo">2410</span>          if (this.puts.size() == opts.multiPut) {<a name="line.2410"></a>
<span class="sourceLineNo">2411</span>            table.put(this.puts);<a name="line.2411"></a>
<span class="sourceLineNo">2412</span>            this.puts.clear();<a name="line.2412"></a>
<span class="sourceLineNo">2413</span>          } else {<a name="line.2413"></a>
<span class="sourceLineNo">2414</span>            return false;<a name="line.2414"></a>
<span class="sourceLineNo">2415</span>          }<a name="line.2415"></a>
<span class="sourceLineNo">2416</span>        } else {<a name="line.2416"></a>
<span class="sourceLineNo">2417</span>          table.put(put);<a name="line.2417"></a>
<span class="sourceLineNo">2418</span>        }<a name="line.2418"></a>
<span class="sourceLineNo">2419</span>      } else {<a name="line.2419"></a>
<span class="sourceLineNo">2420</span>        mutator.mutate(put);<a name="line.2420"></a>
<span class="sourceLineNo">2421</span>      }<a name="line.2421"></a>
<span class="sourceLineNo">2422</span>      return true;<a name="line.2422"></a>
<span class="sourceLineNo">2423</span>    }<a name="line.2423"></a>
<span class="sourceLineNo">2424</span>  }<a name="line.2424"></a>
<span class="sourceLineNo">2425</span><a name="line.2425"></a>
<span class="sourceLineNo">2426</span>  static class SequentialDeleteTest extends BufferedMutatorTest {<a name="line.2426"></a>
<span class="sourceLineNo">2427</span><a name="line.2427"></a>
<span class="sourceLineNo">2428</span>    SequentialDeleteTest(Connection con, TestOptions options, Status status) {<a name="line.2428"></a>
<span class="sourceLineNo">2429</span>      super(con, options, status);<a name="line.2429"></a>
<span class="sourceLineNo">2430</span>    }<a name="line.2430"></a>
<span class="sourceLineNo">2431</span><a name="line.2431"></a>
<span class="sourceLineNo">2432</span>    protected byte[] generateRow(final int i) {<a name="line.2432"></a>
<span class="sourceLineNo">2433</span>      return format(i);<a name="line.2433"></a>
<span class="sourceLineNo">2434</span>    }<a name="line.2434"></a>
<span class="sourceLineNo">2435</span><a name="line.2435"></a>
<span class="sourceLineNo">2436</span>    @Override<a name="line.2436"></a>
<span class="sourceLineNo">2437</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.2437"></a>
<span class="sourceLineNo">2438</span>      byte[] row = generateRow(i);<a name="line.2438"></a>
<span class="sourceLineNo">2439</span>      Delete delete = new Delete(row);<a name="line.2439"></a>
<span class="sourceLineNo">2440</span>      for (int family = 0; family &lt; opts.families; family++) {<a name="line.2440"></a>
<span class="sourceLineNo">2441</span>        byte[] familyName = Bytes.toBytes(FAMILY_NAME_BASE + family);<a name="line.2441"></a>
<span class="sourceLineNo">2442</span>        delete.addFamily(familyName);<a name="line.2442"></a>
<span class="sourceLineNo">2443</span>      }<a name="line.2443"></a>
<span class="sourceLineNo">2444</span>      delete.setDurability(opts.writeToWAL ? Durability.SYNC_WAL : Durability.SKIP_WAL);<a name="line.2444"></a>
<span class="sourceLineNo">2445</span>      if (opts.autoFlush) {<a name="line.2445"></a>
<span class="sourceLineNo">2446</span>        table.delete(delete);<a name="line.2446"></a>
<span class="sourceLineNo">2447</span>      } else {<a name="line.2447"></a>
<span class="sourceLineNo">2448</span>        mutator.mutate(delete);<a name="line.2448"></a>
<span class="sourceLineNo">2449</span>      }<a name="line.2449"></a>
<span class="sourceLineNo">2450</span>      return true;<a name="line.2450"></a>
<span class="sourceLineNo">2451</span>    }<a name="line.2451"></a>
<span class="sourceLineNo">2452</span>  }<a name="line.2452"></a>
<span class="sourceLineNo">2453</span><a name="line.2453"></a>
<span class="sourceLineNo">2454</span>  /*<a name="line.2454"></a>
<span class="sourceLineNo">2455</span>   * Insert fake regions into meta table with contiguous split keys.<a name="line.2455"></a>
<span class="sourceLineNo">2456</span>   */<a name="line.2456"></a>
<span class="sourceLineNo">2457</span>  static class MetaWriteTest extends MetaTest {<a name="line.2457"></a>
<span class="sourceLineNo">2458</span><a name="line.2458"></a>
<span class="sourceLineNo">2459</span>    MetaWriteTest(Connection con, TestOptions options, Status status) {<a name="line.2459"></a>
<span class="sourceLineNo">2460</span>      super(con, options, status);<a name="line.2460"></a>
<span class="sourceLineNo">2461</span>    }<a name="line.2461"></a>
<span class="sourceLineNo">2462</span><a name="line.2462"></a>
<span class="sourceLineNo">2463</span>    @Override<a name="line.2463"></a>
<span class="sourceLineNo">2464</span>    boolean testRow(final int i, final long startTime) throws IOException {<a name="line.2464"></a>
<span class="sourceLineNo">2465</span>      List&lt;RegionInfo&gt; regionInfos = new ArrayList&lt;RegionInfo&gt;();<a name="line.2465"></a>
<span class="sourceLineNo">2466</span>      RegionInfo regionInfo = (RegionInfoBuilder.newBuilder(TableName.valueOf(TABLE_NAME))<a name="line.2466"></a>
<span class="sourceLineNo">2467</span>        .setStartKey(getSplitKey(i)).setEndKey(getSplitKey(i + 1)).build());<a name="line.2467"></a>
<span class="sourceLineNo">2468</span>      regionInfos.add(regionInfo);<a name="line.2468"></a>
<span class="sourceLineNo">2469</span>      MetaTableAccessor.addRegionsToMeta(connection, regionInfos, 1);<a name="line.2469"></a>
<span class="sourceLineNo">2470</span><a name="line.2470"></a>
<span class="sourceLineNo">2471</span>      // write the serverName columns<a name="line.2471"></a>
<span class="sourceLineNo">2472</span>      MetaTableAccessor.updateRegionLocation(connection, regionInfo,<a name="line.2472"></a>
<span class="sourceLineNo">2473</span>        ServerName.valueOf("localhost", 60010, rand.nextLong()), i,<a name="line.2473"></a>
<span class="sourceLineNo">2474</span>        EnvironmentEdgeManager.currentTime());<a name="line.2474"></a>
<span class="sourceLineNo">2475</span>      return true;<a name="line.2475"></a>
<span class="sourceLineNo">2476</span>    }<a name="line.2476"></a>
<span class="sourceLineNo">2477</span>  }<a name="line.2477"></a>
<span class="sourceLineNo">2478</span><a name="line.2478"></a>
<span class="sourceLineNo">2479</span>  static class FilteredScanTest extends TableTest {<a name="line.2479"></a>
<span class="sourceLineNo">2480</span>    protected static final Logger LOG = LoggerFactory.getLogger(FilteredScanTest.class.getName());<a name="line.2480"></a>
<span class="sourceLineNo">2481</span><a name="line.2481"></a>
<span class="sourceLineNo">2482</span>    FilteredScanTest(Connection con, TestOptions options, Status status) {<a name="line.2482"></a>
<span class="sourceLineNo">2483</span>      super(con, options, status);<a name="line.2483"></a>
<span class="sourceLineNo">2484</span>      if (opts.perClientRunRows == DEFAULT_ROWS_PER_GB) {<a name="line.2484"></a>
<span class="sourceLineNo">2485</span>        LOG.warn("Option \"rows\" unspecified. Using default value " + DEFAULT_ROWS_PER_GB<a name="line.2485"></a>
<span class="sourceLineNo">2486</span>          + ". This could take a very long time.");<a name="line.2486"></a>
<span class="sourceLineNo">2487</span>      }<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>    @Override<a name="line.2490"></a>
<span class="sourceLineNo">2491</span>    boolean testRow(int i, final long startTime) throws IOException {<a name="line.2491"></a>
<span class="sourceLineNo">2492</span>      byte[] value = generateData(this.rand, getValueLength(this.rand));<a name="line.2492"></a>
<span class="sourceLineNo">2493</span>      Scan scan = constructScan(value);<a name="line.2493"></a>
<span class="sourceLineNo">2494</span>      ResultScanner scanner = null;<a name="line.2494"></a>
<span class="sourceLineNo">2495</span>      try {<a name="line.2495"></a>
<span class="sourceLineNo">2496</span>        scanner = this.table.getScanner(scan);<a name="line.2496"></a>
<span class="sourceLineNo">2497</span>        for (Result r = null; (r = scanner.next()) != null;) {<a name="line.2497"></a>
<span class="sourceLineNo">2498</span>          updateValueSize(r);<a name="line.2498"></a>
<span class="sourceLineNo">2499</span>        }<a name="line.2499"></a>
<span class="sourceLineNo">2500</span>      } finally {<a name="line.2500"></a>
<span class="sourceLineNo">2501</span>        if (scanner != null) {<a name="line.2501"></a>
<span class="sourceLineNo">2502</span>          updateScanMetrics(scanner.getScanMetrics());<a name="line.2502"></a>
<span class="sourceLineNo">2503</span>          scanner.close();<a name="line.2503"></a>
<span class="sourceLineNo">2504</span>        }<a name="line.2504"></a>
<span class="sourceLineNo">2505</span>      }<a name="line.2505"></a>
<span class="sourceLineNo">2506</span>      return true;<a name="line.2506"></a>
<span class="sourceLineNo">2507</span>    }<a name="line.2507"></a>
<span class="sourceLineNo">2508</span><a name="line.2508"></a>
<span class="sourceLineNo">2509</span>    protected Scan constructScan(byte[] valuePrefix) throws IOException {<a name="line.2509"></a>
<span class="sourceLineNo">2510</span>      FilterList list = new FilterList();<a name="line.2510"></a>
<span class="sourceLineNo">2511</span>      Filter filter = new SingleColumnValueFilter(FAMILY_ZERO, COLUMN_ZERO, CompareOperator.EQUAL,<a name="line.2511"></a>
<span class="sourceLineNo">2512</span>        new BinaryComparator(valuePrefix));<a name="line.2512"></a>
<span class="sourceLineNo">2513</span>      list.addFilter(filter);<a name="line.2513"></a>
<span class="sourceLineNo">2514</span>      if (opts.filterAll) {<a name="line.2514"></a>
<span class="sourceLineNo">2515</span>        list.addFilter(new FilterAllFilter());<a name="line.2515"></a>
<span class="sourceLineNo">2516</span>      }<a name="line.2516"></a>
<span class="sourceLineNo">2517</span>      Scan scan = new Scan().setCaching(opts.caching).setCacheBlocks(opts.cacheBlocks)<a name="line.2517"></a>
<span class="sourceLineNo">2518</span>        .setAsyncPrefetch(opts.asyncPrefetch).setReadType(opts.scanReadType)<a name="line.2518"></a>
<span class="sourceLineNo">2519</span>        .setScanMetricsEnabled(true);<a name="line.2519"></a>
<span class="sourceLineNo">2520</span>      if (opts.addColumns) {<a name="line.2520"></a>
<span class="sourceLineNo">2521</span>        for (int column = 0; column &lt; opts.columns; column++) {<a name="line.2521"></a>
<span class="sourceLineNo">2522</span>          byte[] qualifier = column == 0 ? COLUMN_ZERO : Bytes.toBytes("" + column);<a name="line.2522"></a>
<span class="sourceLineNo">2523</span>          scan.addColumn(FAMILY_ZERO, qualifier);<a name="line.2523"></a>
<span class="sourceLineNo">2524</span>        }<a name="line.2524"></a>
<span class="sourceLineNo">2525</span>      } else {<a name="line.2525"></a>
<span class="sourceLineNo">2526</span>        scan.addFamily(FAMILY_ZERO);<a name="line.2526"></a>
<span class="sourceLineNo">2527</span>      }<a name="line.2527"></a>
<span class="sourceLineNo">2528</span>      scan.setFilter(list);<a name="line.2528"></a>
<span class="sourceLineNo">2529</span>      return scan;<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><a name="line.2532"></a>
<span class="sourceLineNo">2533</span>  /**<a name="line.2533"></a>
<span class="sourceLineNo">2534</span>   * Compute a throughput rate in MB/s.<a name="line.2534"></a>
<span class="sourceLineNo">2535</span>   * @param rows   Number of records consumed.<a name="line.2535"></a>
<span class="sourceLineNo">2536</span>   * @param timeMs Time taken in milliseconds.<a name="line.2536"></a>
<span class="sourceLineNo">2537</span>   * @return String value with label, ie '123.76 MB/s'<a name="line.2537"></a>
<span class="sourceLineNo">2538</span>   */<a name="line.2538"></a>
<span class="sourceLineNo">2539</span>  private static String calculateMbps(int rows, long timeMs, final int valueSize, int families,<a name="line.2539"></a>
<span class="sourceLineNo">2540</span>    int columns) {<a name="line.2540"></a>
<span class="sourceLineNo">2541</span>    BigDecimal rowSize = BigDecimal.valueOf(ROW_LENGTH<a name="line.2541"></a>
<span class="sourceLineNo">2542</span>      + ((valueSize + (FAMILY_NAME_BASE.length() + 1) + COLUMN_ZERO.length) * columns) * families);<a name="line.2542"></a>
<span class="sourceLineNo">2543</span>    BigDecimal mbps = BigDecimal.valueOf(rows).multiply(rowSize, CXT)<a name="line.2543"></a>
<span class="sourceLineNo">2544</span>      .divide(BigDecimal.valueOf(timeMs), CXT).multiply(MS_PER_SEC, CXT).divide(BYTES_PER_MB, CXT);<a name="line.2544"></a>
<span class="sourceLineNo">2545</span>    return FMT.format(mbps) + " MB/s";<a name="line.2545"></a>
<span class="sourceLineNo">2546</span>  }<a name="line.2546"></a>
<span class="sourceLineNo">2547</span><a name="line.2547"></a>
<span class="sourceLineNo">2548</span>  /*<a name="line.2548"></a>
<span class="sourceLineNo">2549</span>   * Format passed integer.<a name="line.2549"></a>
<span class="sourceLineNo">2550</span>   * @return Returns zero-prefixed ROW_LENGTH-byte wide decimal version of passed number (Does<a name="line.2550"></a>
<span class="sourceLineNo">2551</span>   * absolute in case number is negative).<a name="line.2551"></a>
<span class="sourceLineNo">2552</span>   */<a name="line.2552"></a>
<span class="sourceLineNo">2553</span>  public static byte[] format(final int number) {<a name="line.2553"></a>
<span class="sourceLineNo">2554</span>    byte[] b = new byte[ROW_LENGTH];<a name="line.2554"></a>
<span class="sourceLineNo">2555</span>    int d = Math.abs(number);<a name="line.2555"></a>
<span class="sourceLineNo">2556</span>    for (int i = b.length - 1; i &gt;= 0; i--) {<a name="line.2556"></a>
<span class="sourceLineNo">2557</span>      b[i] = (byte) ((d % 10) + '0');<a name="line.2557"></a>
<span class="sourceLineNo">2558</span>      d /= 10;<a name="line.2558"></a>
<span class="sourceLineNo">2559</span>    }<a name="line.2559"></a>
<span class="sourceLineNo">2560</span>    return b;<a name="line.2560"></a>
<span class="sourceLineNo">2561</span>  }<a name="line.2561"></a>
<span class="sourceLineNo">2562</span><a name="line.2562"></a>
<span class="sourceLineNo">2563</span>  /*<a name="line.2563"></a>
<span class="sourceLineNo">2564</span>   * This method takes some time and is done inline uploading data. For example, doing the mapfile<a name="line.2564"></a>
<span class="sourceLineNo">2565</span>   * test, generation of the key and value consumes about 30% of CPU time.<a name="line.2565"></a>
<span class="sourceLineNo">2566</span>   * @return Generated random value to insert into a table cell.<a name="line.2566"></a>
<span class="sourceLineNo">2567</span>   */<a name="line.2567"></a>
<span class="sourceLineNo">2568</span>  public static byte[] generateData(final Random r, int length) {<a name="line.2568"></a>
<span class="sourceLineNo">2569</span>    byte[] b = new byte[length];<a name="line.2569"></a>
<span class="sourceLineNo">2570</span>    int i;<a name="line.2570"></a>
<span class="sourceLineNo">2571</span><a name="line.2571"></a>
<span class="sourceLineNo">2572</span>    for (i = 0; i &lt; (length - 8); i += 8) {<a name="line.2572"></a>
<span class="sourceLineNo">2573</span>      b[i] = (byte) (65 + r.nextInt(26));<a name="line.2573"></a>
<span class="sourceLineNo">2574</span>      b[i + 1] = b[i];<a name="line.2574"></a>
<span class="sourceLineNo">2575</span>      b[i + 2] = b[i];<a name="line.2575"></a>
<span class="sourceLineNo">2576</span>      b[i + 3] = b[i];<a name="line.2576"></a>
<span class="sourceLineNo">2577</span>      b[i + 4] = b[i];<a name="line.2577"></a>
<span class="sourceLineNo">2578</span>      b[i + 5] = b[i];<a name="line.2578"></a>
<span class="sourceLineNo">2579</span>      b[i + 6] = b[i];<a name="line.2579"></a>
<span class="sourceLineNo">2580</span>      b[i + 7] = b[i];<a name="line.2580"></a>
<span class="sourceLineNo">2581</span>    }<a name="line.2581"></a>
<span class="sourceLineNo">2582</span><a name="line.2582"></a>
<span class="sourceLineNo">2583</span>    byte a = (byte) (65 + r.nextInt(26));<a name="line.2583"></a>
<span class="sourceLineNo">2584</span>    for (; i &lt; length; i++) {<a name="line.2584"></a>
<span class="sourceLineNo">2585</span>      b[i] = a;<a name="line.2585"></a>
<span class="sourceLineNo">2586</span>    }<a name="line.2586"></a>
<span class="sourceLineNo">2587</span>    return b;<a name="line.2587"></a>
<span class="sourceLineNo">2588</span>  }<a name="line.2588"></a>
<span class="sourceLineNo">2589</span><a name="line.2589"></a>
<span class="sourceLineNo">2590</span>  static byte[] getRandomRow(final Random random, final int totalRows) {<a name="line.2590"></a>
<span class="sourceLineNo">2591</span>    return format(generateRandomRow(random, totalRows));<a name="line.2591"></a>
<span class="sourceLineNo">2592</span>  }<a name="line.2592"></a>
<span class="sourceLineNo">2593</span><a name="line.2593"></a>
<span class="sourceLineNo">2594</span>  static int generateRandomRow(final Random random, final int totalRows) {<a name="line.2594"></a>
<span class="sourceLineNo">2595</span>    return random.nextInt(Integer.MAX_VALUE) % totalRows;<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>  static RunResult runOneClient(final Class&lt;? extends TestBase&gt; cmd, Configuration conf,<a name="line.2598"></a>
<span class="sourceLineNo">2599</span>    Connection con, AsyncConnection asyncCon, TestOptions opts, final Status status)<a name="line.2599"></a>
<span class="sourceLineNo">2600</span>    throws IOException, InterruptedException {<a name="line.2600"></a>
<span class="sourceLineNo">2601</span>    status.setStatus(<a name="line.2601"></a>
<span class="sourceLineNo">2602</span>      "Start " + cmd + " at offset " + opts.startRow + " for " + opts.perClientRunRows + " rows");<a name="line.2602"></a>
<span class="sourceLineNo">2603</span>    long totalElapsedTime;<a name="line.2603"></a>
<span class="sourceLineNo">2604</span><a name="line.2604"></a>
<span class="sourceLineNo">2605</span>    final TestBase t;<a name="line.2605"></a>
<span class="sourceLineNo">2606</span>    try {<a name="line.2606"></a>
<span class="sourceLineNo">2607</span>      if (AsyncTest.class.isAssignableFrom(cmd)) {<a name="line.2607"></a>
<span class="sourceLineNo">2608</span>        Class&lt;? extends AsyncTest&gt; newCmd = (Class&lt;? extends AsyncTest&gt;) cmd;<a name="line.2608"></a>
<span class="sourceLineNo">2609</span>        Constructor&lt;? extends AsyncTest&gt; constructor =<a name="line.2609"></a>
<span class="sourceLineNo">2610</span>          newCmd.getDeclaredConstructor(AsyncConnection.class, TestOptions.class, Status.class);<a name="line.2610"></a>
<span class="sourceLineNo">2611</span>        t = constructor.newInstance(asyncCon, opts, status);<a name="line.2611"></a>
<span class="sourceLineNo">2612</span>      } else {<a name="line.2612"></a>
<span class="sourceLineNo">2613</span>        Class&lt;? extends Test&gt; newCmd = (Class&lt;? extends Test&gt;) cmd;<a name="line.2613"></a>
<span class="sourceLineNo">2614</span>        Constructor&lt;? extends Test&gt; constructor =<a name="line.2614"></a>
<span class="sourceLineNo">2615</span>          newCmd.getDeclaredConstructor(Connection.class, TestOptions.class, Status.class);<a name="line.2615"></a>
<span class="sourceLineNo">2616</span>        t = constructor.newInstance(con, opts, status);<a name="line.2616"></a>
<span class="sourceLineNo">2617</span>      }<a name="line.2617"></a>
<span class="sourceLineNo">2618</span>    } catch (NoSuchMethodException e) {<a name="line.2618"></a>
<span class="sourceLineNo">2619</span>      throw new IllegalArgumentException("Invalid command class: " + cmd.getName()<a name="line.2619"></a>
<span class="sourceLineNo">2620</span>        + ".  It does not provide a constructor as described by "<a name="line.2620"></a>
<span class="sourceLineNo">2621</span>        + "the javadoc comment.  Available constructors are: "<a name="line.2621"></a>
<span class="sourceLineNo">2622</span>        + Arrays.toString(cmd.getConstructors()));<a name="line.2622"></a>
<span class="sourceLineNo">2623</span>    } catch (Exception e) {<a name="line.2623"></a>
<span class="sourceLineNo">2624</span>      throw new IllegalStateException("Failed to construct command class", e);<a name="line.2624"></a>
<span class="sourceLineNo">2625</span>    }<a name="line.2625"></a>
<span class="sourceLineNo">2626</span>    totalElapsedTime = t.test();<a name="line.2626"></a>
<span class="sourceLineNo">2627</span><a name="line.2627"></a>
<span class="sourceLineNo">2628</span>    status.setStatus("Finished " + cmd + " in " + totalElapsedTime + "ms at offset " + opts.startRow<a name="line.2628"></a>
<span class="sourceLineNo">2629</span>      + " for " + opts.perClientRunRows + " rows" + " ("<a name="line.2629"></a>
<span class="sourceLineNo">2630</span>      + calculateMbps((int) (opts.perClientRunRows * opts.sampleRate), totalElapsedTime,<a name="line.2630"></a>
<span class="sourceLineNo">2631</span>        getAverageValueLength(opts), opts.families, opts.columns)<a name="line.2631"></a>
<span class="sourceLineNo">2632</span>      + ")");<a name="line.2632"></a>
<span class="sourceLineNo">2633</span><a name="line.2633"></a>
<span class="sourceLineNo">2634</span>    return new RunResult(totalElapsedTime, t.numOfReplyOverLatencyThreshold,<a name="line.2634"></a>
<span class="sourceLineNo">2635</span>      t.numOfReplyFromReplica, t.getLatencyHistogram());<a name="line.2635"></a>
<span class="sourceLineNo">2636</span>  }<a name="line.2636"></a>
<span class="sourceLineNo">2637</span><a name="line.2637"></a>
<span class="sourceLineNo">2638</span>  private static int getAverageValueLength(final TestOptions opts) {<a name="line.2638"></a>
<span class="sourceLineNo">2639</span>    return opts.valueRandom ? opts.valueSize / 2 : opts.valueSize;<a name="line.2639"></a>
<span class="sourceLineNo">2640</span>  }<a name="line.2640"></a>
<span class="sourceLineNo">2641</span><a name="line.2641"></a>
<span class="sourceLineNo">2642</span>  private void runTest(final Class&lt;? extends TestBase&gt; cmd, TestOptions opts)<a name="line.2642"></a>
<span class="sourceLineNo">2643</span>    throws IOException, InterruptedException, ClassNotFoundException, ExecutionException {<a name="line.2643"></a>
<span class="sourceLineNo">2644</span>    // Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do<a name="line.2644"></a>
<span class="sourceLineNo">2645</span>    // the TestOptions introspection for us and dump the output in a readable format.<a name="line.2645"></a>
<span class="sourceLineNo">2646</span>    LOG.info(cmd.getSimpleName() + " test run options=" + GSON.toJson(opts));<a name="line.2646"></a>
<span class="sourceLineNo">2647</span>    Admin admin = null;<a name="line.2647"></a>
<span class="sourceLineNo">2648</span>    Connection connection = null;<a name="line.2648"></a>
<span class="sourceLineNo">2649</span>    try {<a name="line.2649"></a>
<span class="sourceLineNo">2650</span>      connection = ConnectionFactory.createConnection(getConf());<a name="line.2650"></a>
<span class="sourceLineNo">2651</span>      admin = connection.getAdmin();<a name="line.2651"></a>
<span class="sourceLineNo">2652</span>      checkTable(admin, opts);<a name="line.2652"></a>
<span class="sourceLineNo">2653</span>    } finally {<a name="line.2653"></a>
<span class="sourceLineNo">2654</span>      if (admin != null) admin.close();<a name="line.2654"></a>
<span class="sourceLineNo">2655</span>      if (connection != null) connection.close();<a name="line.2655"></a>
<span class="sourceLineNo">2656</span>    }<a name="line.2656"></a>
<span class="sourceLineNo">2657</span>    if (opts.nomapred) {<a name="line.2657"></a>
<span class="sourceLineNo">2658</span>      doLocalClients(opts, getConf());<a name="line.2658"></a>
<span class="sourceLineNo">2659</span>    } else {<a name="line.2659"></a>
<span class="sourceLineNo">2660</span>      doMapReduce(opts, getConf());<a name="line.2660"></a>
<span class="sourceLineNo">2661</span>    }<a name="line.2661"></a>
<span class="sourceLineNo">2662</span>  }<a name="line.2662"></a>
<span class="sourceLineNo">2663</span><a name="line.2663"></a>
<span class="sourceLineNo">2664</span>  protected void printUsage() {<a name="line.2664"></a>
<span class="sourceLineNo">2665</span>    printUsage(PE_COMMAND_SHORTNAME, null);<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>  protected static void printUsage(final String message) {<a name="line.2668"></a>
<span class="sourceLineNo">2669</span>    printUsage(PE_COMMAND_SHORTNAME, message);<a name="line.2669"></a>
<span class="sourceLineNo">2670</span>  }<a name="line.2670"></a>
<span class="sourceLineNo">2671</span><a name="line.2671"></a>
<span class="sourceLineNo">2672</span>  protected static void printUsageAndExit(final String message, final int exitCode) {<a name="line.2672"></a>
<span class="sourceLineNo">2673</span>    printUsage(message);<a name="line.2673"></a>
<span class="sourceLineNo">2674</span>    System.exit(exitCode);<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>  protected static void printUsage(final String shortName, final String message) {<a name="line.2677"></a>
<span class="sourceLineNo">2678</span>    if (message != null &amp;&amp; message.length() &gt; 0) {<a name="line.2678"></a>
<span class="sourceLineNo">2679</span>      System.err.println(message);<a name="line.2679"></a>
<span class="sourceLineNo">2680</span>    }<a name="line.2680"></a>
<span class="sourceLineNo">2681</span>    System.err.print("Usage: hbase " + shortName);<a name="line.2681"></a>
<span class="sourceLineNo">2682</span>    System.err.println("  &lt;OPTIONS&gt; [-D&lt;property=value&gt;]* &lt;command|class&gt; &lt;nclients&gt;");<a name="line.2682"></a>
<span class="sourceLineNo">2683</span>    System.err.println();<a name="line.2683"></a>
<span class="sourceLineNo">2684</span>    System.err.println("General Options:");<a name="line.2684"></a>
<span class="sourceLineNo">2685</span>    System.err.println(<a name="line.2685"></a>
<span class="sourceLineNo">2686</span>      " nomapred        Run multiple clients using threads " + "(rather than use mapreduce)");<a name="line.2686"></a>
<span class="sourceLineNo">2687</span>    System.err<a name="line.2687"></a>
<span class="sourceLineNo">2688</span>      .println(" oneCon          all the threads share the same connection. Default: False");<a name="line.2688"></a>
<span class="sourceLineNo">2689</span>    System.err.println(" connCount          connections all threads share. "<a name="line.2689"></a>
<span class="sourceLineNo">2690</span>      + "For example, if set to 2, then all thread share 2 connection. "<a name="line.2690"></a>
<span class="sourceLineNo">2691</span>      + "Default: depend on oneCon parameter. if oneCon set to true, then connCount=1, "<a name="line.2691"></a>
<span class="sourceLineNo">2692</span>      + "if not, connCount=thread number");<a name="line.2692"></a>
<span class="sourceLineNo">2693</span><a name="line.2693"></a>
<span class="sourceLineNo">2694</span>    System.err.println(" sampleRate      Execute test on a sample of total "<a name="line.2694"></a>
<span class="sourceLineNo">2695</span>      + "rows. Only supported by randomRead. Default: 1.0");<a name="line.2695"></a>
<span class="sourceLineNo">2696</span>    System.err.println(" period          Report every 'period' rows: "<a name="line.2696"></a>
<span class="sourceLineNo">2697</span>      + "Default: opts.perClientRunRows / 10 = " + DEFAULT_OPTS.getPerClientRunRows() / 10);<a name="line.2697"></a>
<span class="sourceLineNo">2698</span>    System.err.println(" cycles          How many times to cycle the test. Defaults: 1.");<a name="line.2698"></a>
<span class="sourceLineNo">2699</span>    System.err.println(<a name="line.2699"></a>
<span class="sourceLineNo">2700</span>      " traceRate       Enable HTrace spans. Initiate tracing every N rows. " + "Default: 0");<a name="line.2700"></a>
<span class="sourceLineNo">2701</span>    System.err.println(" latency         Set to report operation latencies. Default: False");<a name="line.2701"></a>
<span class="sourceLineNo">2702</span>    System.err.println(" latencyThreshold  Set to report number of operations with latency "<a name="line.2702"></a>
<span class="sourceLineNo">2703</span>      + "over lantencyThreshold, unit in millisecond, default 0");<a name="line.2703"></a>
<span class="sourceLineNo">2704</span>    System.err.println(" measureAfter    Start to measure the latency once 'measureAfter'"<a name="line.2704"></a>
<span class="sourceLineNo">2705</span>      + " rows have been treated. Default: 0");<a name="line.2705"></a>
<span class="sourceLineNo">2706</span>    System.err<a name="line.2706"></a>
<span class="sourceLineNo">2707</span>      .println(" valueSize       Pass value size to use: Default: " + DEFAULT_OPTS.getValueSize());<a name="line.2707"></a>
<span class="sourceLineNo">2708</span>    System.err.println(" valueRandom     Set if we should vary value size between 0 and "<a name="line.2708"></a>
<span class="sourceLineNo">2709</span>      + "'valueSize'; set on read for stats on size: Default: Not set.");<a name="line.2709"></a>
<span class="sourceLineNo">2710</span>    System.err.println(" blockEncoding   Block encoding to use. Value should be one of "<a name="line.2710"></a>
<span class="sourceLineNo">2711</span>      + Arrays.toString(DataBlockEncoding.values()) + ". Default: NONE");<a name="line.2711"></a>
<span class="sourceLineNo">2712</span>    System.err.println();<a name="line.2712"></a>
<span class="sourceLineNo">2713</span>    System.err.println("Table Creation / Write Tests:");<a name="line.2713"></a>
<span class="sourceLineNo">2714</span>    System.err.println(" table           Alternate table name. Default: 'TestTable'");<a name="line.2714"></a>
<span class="sourceLineNo">2715</span>    System.err.println(<a name="line.2715"></a>
<span class="sourceLineNo">2716</span>      " rows            Rows each client runs. Default: " + DEFAULT_OPTS.getPerClientRunRows()<a name="line.2716"></a>
<span class="sourceLineNo">2717</span>        + ".  In case of randomReads and randomSeekScans this could"<a name="line.2717"></a>
<span class="sourceLineNo">2718</span>        + " be specified along with --size to specify the number of rows to be scanned within"<a name="line.2718"></a>
<span class="sourceLineNo">2719</span>        + " the total range specified by the size.");<a name="line.2719"></a>
<span class="sourceLineNo">2720</span>    System.err.println(<a name="line.2720"></a>
<span class="sourceLineNo">2721</span>      " size            Total size in GiB. Mutually exclusive with --rows for writes and scans"<a name="line.2721"></a>
<span class="sourceLineNo">2722</span>        + ". But for randomReads and randomSeekScans when you use size with --rows you could"<a name="line.2722"></a>
<span class="sourceLineNo">2723</span>        + " use size to specify the end range and --rows"<a name="line.2723"></a>
<span class="sourceLineNo">2724</span>        + " specifies the number of rows within that range. " + "Default: 1.0.");<a name="line.2724"></a>
<span class="sourceLineNo">2725</span>    System.err.println(" compress        Compression type to use (GZ, LZO, ...). Default: 'NONE'");<a name="line.2725"></a>
<span class="sourceLineNo">2726</span>    System.err.println(" encryption      Encryption type to use (AES, ...). Default: 'NONE'");<a name="line.2726"></a>
<span class="sourceLineNo">2727</span>    System.err.println(<a name="line.2727"></a>
<span class="sourceLineNo">2728</span>      " flushCommits    Used to determine if the test should flush the table. " + "Default: false");<a name="line.2728"></a>
<span class="sourceLineNo">2729</span>    System.err.println(" valueZipf       Set if we should vary value size between 0 and "<a name="line.2729"></a>
<span class="sourceLineNo">2730</span>      + "'valueSize' in zipf form: Default: Not set.");<a name="line.2730"></a>
<span class="sourceLineNo">2731</span>    System.err.println(" writeToWAL      Set writeToWAL on puts. Default: True");<a name="line.2731"></a>
<span class="sourceLineNo">2732</span>    System.err.println(" autoFlush       Set autoFlush on htable. Default: False");<a name="line.2732"></a>
<span class="sourceLineNo">2733</span>    System.err.println(" multiPut        Batch puts together into groups of N. Only supported "<a name="line.2733"></a>
<span class="sourceLineNo">2734</span>      + "by write. If multiPut is bigger than 0, autoFlush need to set to true. Default: 0");<a name="line.2734"></a>
<span class="sourceLineNo">2735</span>    System.err.println(" presplit        Create presplit table. If a table with same name exists,"<a name="line.2735"></a>
<span class="sourceLineNo">2736</span>      + " it'll be deleted and recreated (instead of verifying count of its existing regions). "<a name="line.2736"></a>
<span class="sourceLineNo">2737</span>      + "Recommended for accurate perf analysis (see guide). Default: disabled");<a name="line.2737"></a>
<span class="sourceLineNo">2738</span>    System.err.println(<a name="line.2738"></a>
<span class="sourceLineNo">2739</span>      " usetags         Writes tags along with KVs. Use with HFile V3. " + "Default: false");<a name="line.2739"></a>
<span class="sourceLineNo">2740</span>    System.err.println(" numoftags       Specify the no of tags that would be needed. "<a name="line.2740"></a>
<span class="sourceLineNo">2741</span>      + "This works only if usetags is true. Default: " + DEFAULT_OPTS.noOfTags);<a name="line.2741"></a>
<span class="sourceLineNo">2742</span>    System.err.println(" splitPolicy     Specify a custom RegionSplitPolicy for the table.");<a name="line.2742"></a>
<span class="sourceLineNo">2743</span>    System.err.println(" columns         Columns to write per row. Default: 1");<a name="line.2743"></a>
<span class="sourceLineNo">2744</span>    System.err<a name="line.2744"></a>
<span class="sourceLineNo">2745</span>      .println(" families        Specify number of column families for the table. Default: 1");<a name="line.2745"></a>
<span class="sourceLineNo">2746</span>    System.err.println();<a name="line.2746"></a>
<span class="sourceLineNo">2747</span>    System.err.println("Read Tests:");<a name="line.2747"></a>
<span class="sourceLineNo">2748</span>    System.err.println(" filterAll       Helps to filter out all the rows on the server side"<a name="line.2748"></a>
<span class="sourceLineNo">2749</span>      + " there by not returning any thing back to the client.  Helps to check the server side"<a name="line.2749"></a>
<span class="sourceLineNo">2750</span>      + " performance.  Uses FilterAllFilter internally. ");<a name="line.2750"></a>
<span class="sourceLineNo">2751</span>    System.err.println(" multiGet        Batch gets together into groups of N. Only supported "<a name="line.2751"></a>
<span class="sourceLineNo">2752</span>      + "by randomRead. Default: disabled");<a name="line.2752"></a>
<span class="sourceLineNo">2753</span>    System.err.println(" inmemory        Tries to keep the HFiles of the CF "<a name="line.2753"></a>
<span class="sourceLineNo">2754</span>      + "inmemory as far as possible. Not guaranteed that reads are always served "<a name="line.2754"></a>
<span class="sourceLineNo">2755</span>      + "from memory.  Default: false");<a name="line.2755"></a>
<span class="sourceLineNo">2756</span>    System.err<a name="line.2756"></a>
<span class="sourceLineNo">2757</span>      .println(" bloomFilter     Bloom filter type, one of " + Arrays.toString(BloomType.values()));<a name="line.2757"></a>
<span class="sourceLineNo">2758</span>    System.err.println(" blockSize       Blocksize to use when writing out hfiles. ");<a name="line.2758"></a>
<span class="sourceLineNo">2759</span>    System.err<a name="line.2759"></a>
<span class="sourceLineNo">2760</span>      .println(" inmemoryCompaction  Makes the column family to do inmemory flushes/compactions. "<a name="line.2760"></a>
<span class="sourceLineNo">2761</span>        + "Uses the CompactingMemstore");<a name="line.2761"></a>
<span class="sourceLineNo">2762</span>    System.err.println(" addColumns      Adds columns to scans/gets explicitly. Default: true");<a name="line.2762"></a>
<span class="sourceLineNo">2763</span>    System.err.println(" replicas        Enable region replica testing. Defaults: 1.");<a name="line.2763"></a>
<span class="sourceLineNo">2764</span>    System.err.println(<a name="line.2764"></a>
<span class="sourceLineNo">2765</span>      " randomSleep     Do a random sleep before each get between 0 and entered value. Defaults: 0");<a name="line.2765"></a>
<span class="sourceLineNo">2766</span>    System.err.println(" caching         Scan caching to use. Default: 30");<a name="line.2766"></a>
<span class="sourceLineNo">2767</span>    System.err.println(" asyncPrefetch   Enable asyncPrefetch for scan");<a name="line.2767"></a>
<span class="sourceLineNo">2768</span>    System.err.println(" cacheBlocks     Set the cacheBlocks option for scan. Default: true");<a name="line.2768"></a>
<span class="sourceLineNo">2769</span>    System.err.println(<a name="line.2769"></a>
<span class="sourceLineNo">2770</span>      " scanReadType    Set the readType option for scan, stream/pread/default. Default: default");<a name="line.2770"></a>
<span class="sourceLineNo">2771</span>    System.err.println(" bufferSize      Set the value of client side buffering. Default: 2MB");<a name="line.2771"></a>
<span class="sourceLineNo">2772</span>    System.err.println();<a name="line.2772"></a>
<span class="sourceLineNo">2773</span>    System.err.println(" Note: -D properties will be applied to the conf used. ");<a name="line.2773"></a>
<span class="sourceLineNo">2774</span>    System.err.println("  For example: ");<a name="line.2774"></a>
<span class="sourceLineNo">2775</span>    System.err.println("   -Dmapreduce.output.fileoutputformat.compress=true");<a name="line.2775"></a>
<span class="sourceLineNo">2776</span>    System.err.println("   -Dmapreduce.task.timeout=60000");<a name="line.2776"></a>
<span class="sourceLineNo">2777</span>    System.err.println();<a name="line.2777"></a>
<span class="sourceLineNo">2778</span>    System.err.println("Command:");<a name="line.2778"></a>
<span class="sourceLineNo">2779</span>    for (CmdDescriptor command : COMMANDS.values()) {<a name="line.2779"></a>
<span class="sourceLineNo">2780</span>      System.err.println(String.format(" %-20s %s", command.getName(), command.getDescription()));<a name="line.2780"></a>
<span class="sourceLineNo">2781</span>    }<a name="line.2781"></a>
<span class="sourceLineNo">2782</span>    System.err.println();<a name="line.2782"></a>
<span class="sourceLineNo">2783</span>    System.err.println("Class:");<a name="line.2783"></a>
<span class="sourceLineNo">2784</span>    System.err.println("To run any custom implementation of PerformanceEvaluation.Test, "<a name="line.2784"></a>
<span class="sourceLineNo">2785</span>      + "provide the classname of the implementaion class in place of "<a name="line.2785"></a>
<span class="sourceLineNo">2786</span>      + "command name and it will be loaded at runtime from classpath.:");<a name="line.2786"></a>
<span class="sourceLineNo">2787</span>    System.err.println("Please consider to contribute back "<a name="line.2787"></a>
<span class="sourceLineNo">2788</span>      + "this custom test impl into a builtin PE command for the benefit of the community");<a name="line.2788"></a>
<span class="sourceLineNo">2789</span>    System.err.println();<a name="line.2789"></a>
<span class="sourceLineNo">2790</span>    System.err.println("Args:");<a name="line.2790"></a>
<span class="sourceLineNo">2791</span>    System.err.println(" nclients        Integer. Required. Total number of clients "<a name="line.2791"></a>
<span class="sourceLineNo">2792</span>      + "(and HRegionServers) running. 1 &lt;= value &lt;= 500");<a name="line.2792"></a>
<span class="sourceLineNo">2793</span>    System.err.println("Examples:");<a name="line.2793"></a>
<span class="sourceLineNo">2794</span>    System.err.println(" To run a single client doing the default 1M sequentialWrites:");<a name="line.2794"></a>
<span class="sourceLineNo">2795</span>    System.err.println(" $ hbase " + shortName + " sequentialWrite 1");<a name="line.2795"></a>
<span class="sourceLineNo">2796</span>    System.err.println(" To run 10 clients doing increments over ten rows:");<a name="line.2796"></a>
<span class="sourceLineNo">2797</span>    System.err.println(" $ hbase " + shortName + " --rows=10 --nomapred increment 10");<a name="line.2797"></a>
<span class="sourceLineNo">2798</span>  }<a name="line.2798"></a>
<span class="sourceLineNo">2799</span><a name="line.2799"></a>
<span class="sourceLineNo">2800</span>  /**<a name="line.2800"></a>
<span class="sourceLineNo">2801</span>   * Parse options passed in via an arguments array. Assumes that array has been split on<a name="line.2801"></a>
<span class="sourceLineNo">2802</span>   * white-space and placed into a {@code Queue}. Any unknown arguments will remain in the queue at<a name="line.2802"></a>
<span class="sourceLineNo">2803</span>   * the conclusion of this method call. It's up to the caller to deal with these unrecognized<a name="line.2803"></a>
<span class="sourceLineNo">2804</span>   * arguments.<a name="line.2804"></a>
<span class="sourceLineNo">2805</span>   */<a name="line.2805"></a>
<span class="sourceLineNo">2806</span>  static TestOptions parseOpts(Queue&lt;String&gt; args) {<a name="line.2806"></a>
<span class="sourceLineNo">2807</span>    TestOptions opts = new TestOptions();<a name="line.2807"></a>
<span class="sourceLineNo">2808</span><a name="line.2808"></a>
<span class="sourceLineNo">2809</span>    String cmd = null;<a name="line.2809"></a>
<span class="sourceLineNo">2810</span>    while ((cmd = args.poll()) != null) {<a name="line.2810"></a>
<span class="sourceLineNo">2811</span>      if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.2811"></a>
<span class="sourceLineNo">2812</span>        // place item back onto queue so that caller knows parsing was incomplete<a name="line.2812"></a>
<span class="sourceLineNo">2813</span>        args.add(cmd);<a name="line.2813"></a>
<span class="sourceLineNo">2814</span>        break;<a name="line.2814"></a>
<span class="sourceLineNo">2815</span>      }<a name="line.2815"></a>
<span class="sourceLineNo">2816</span><a name="line.2816"></a>
<span class="sourceLineNo">2817</span>      final String nmr = "--nomapred";<a name="line.2817"></a>
<span class="sourceLineNo">2818</span>      if (cmd.startsWith(nmr)) {<a name="line.2818"></a>
<span class="sourceLineNo">2819</span>        opts.nomapred = true;<a name="line.2819"></a>
<span class="sourceLineNo">2820</span>        continue;<a name="line.2820"></a>
<span class="sourceLineNo">2821</span>      }<a name="line.2821"></a>
<span class="sourceLineNo">2822</span><a name="line.2822"></a>
<span class="sourceLineNo">2823</span>      final String rows = "--rows=";<a name="line.2823"></a>
<span class="sourceLineNo">2824</span>      if (cmd.startsWith(rows)) {<a name="line.2824"></a>
<span class="sourceLineNo">2825</span>        opts.perClientRunRows = Integer.parseInt(cmd.substring(rows.length()));<a name="line.2825"></a>
<span class="sourceLineNo">2826</span>        continue;<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>      final String cycles = "--cycles=";<a name="line.2829"></a>
<span class="sourceLineNo">2830</span>      if (cmd.startsWith(cycles)) {<a name="line.2830"></a>
<span class="sourceLineNo">2831</span>        opts.cycles = Integer.parseInt(cmd.substring(cycles.length()));<a name="line.2831"></a>
<span class="sourceLineNo">2832</span>        continue;<a name="line.2832"></a>
<span class="sourceLineNo">2833</span>      }<a name="line.2833"></a>
<span class="sourceLineNo">2834</span><a name="line.2834"></a>
<span class="sourceLineNo">2835</span>      final String sampleRate = "--sampleRate=";<a name="line.2835"></a>
<span class="sourceLineNo">2836</span>      if (cmd.startsWith(sampleRate)) {<a name="line.2836"></a>
<span class="sourceLineNo">2837</span>        opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));<a name="line.2837"></a>
<span class="sourceLineNo">2838</span>        continue;<a name="line.2838"></a>
<span class="sourceLineNo">2839</span>      }<a name="line.2839"></a>
<span class="sourceLineNo">2840</span><a name="line.2840"></a>
<span class="sourceLineNo">2841</span>      final String table = "--table=";<a name="line.2841"></a>
<span class="sourceLineNo">2842</span>      if (cmd.startsWith(table)) {<a name="line.2842"></a>
<span class="sourceLineNo">2843</span>        opts.tableName = cmd.substring(table.length());<a name="line.2843"></a>
<span class="sourceLineNo">2844</span>        continue;<a name="line.2844"></a>
<span class="sourceLineNo">2845</span>      }<a name="line.2845"></a>
<span class="sourceLineNo">2846</span><a name="line.2846"></a>
<span class="sourceLineNo">2847</span>      final String startRow = "--startRow=";<a name="line.2847"></a>
<span class="sourceLineNo">2848</span>      if (cmd.startsWith(startRow)) {<a name="line.2848"></a>
<span class="sourceLineNo">2849</span>        opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));<a name="line.2849"></a>
<span class="sourceLineNo">2850</span>        continue;<a name="line.2850"></a>
<span class="sourceLineNo">2851</span>      }<a name="line.2851"></a>
<span class="sourceLineNo">2852</span><a name="line.2852"></a>
<span class="sourceLineNo">2853</span>      final String compress = "--compress=";<a name="line.2853"></a>
<span class="sourceLineNo">2854</span>      if (cmd.startsWith(compress)) {<a name="line.2854"></a>
<span class="sourceLineNo">2855</span>        opts.compression = Compression.Algorithm.valueOf(cmd.substring(compress.length()));<a name="line.2855"></a>
<span class="sourceLineNo">2856</span>        continue;<a name="line.2856"></a>
<span class="sourceLineNo">2857</span>      }<a name="line.2857"></a>
<span class="sourceLineNo">2858</span><a name="line.2858"></a>
<span class="sourceLineNo">2859</span>      final String encryption = "--encryption=";<a name="line.2859"></a>
<span class="sourceLineNo">2860</span>      if (cmd.startsWith(encryption)) {<a name="line.2860"></a>
<span class="sourceLineNo">2861</span>        opts.encryption = cmd.substring(encryption.length());<a name="line.2861"></a>
<span class="sourceLineNo">2862</span>        continue;<a name="line.2862"></a>
<span class="sourceLineNo">2863</span>      }<a name="line.2863"></a>
<span class="sourceLineNo">2864</span><a name="line.2864"></a>
<span class="sourceLineNo">2865</span>      final String traceRate = "--traceRate=";<a name="line.2865"></a>
<span class="sourceLineNo">2866</span>      if (cmd.startsWith(traceRate)) {<a name="line.2866"></a>
<span class="sourceLineNo">2867</span>        opts.traceRate = Double.parseDouble(cmd.substring(traceRate.length()));<a name="line.2867"></a>
<span class="sourceLineNo">2868</span>        continue;<a name="line.2868"></a>
<span class="sourceLineNo">2869</span>      }<a name="line.2869"></a>
<span class="sourceLineNo">2870</span><a name="line.2870"></a>
<span class="sourceLineNo">2871</span>      final String blockEncoding = "--blockEncoding=";<a name="line.2871"></a>
<span class="sourceLineNo">2872</span>      if (cmd.startsWith(blockEncoding)) {<a name="line.2872"></a>
<span class="sourceLineNo">2873</span>        opts.blockEncoding = DataBlockEncoding.valueOf(cmd.substring(blockEncoding.length()));<a name="line.2873"></a>
<span class="sourceLineNo">2874</span>        continue;<a name="line.2874"></a>
<span class="sourceLineNo">2875</span>      }<a name="line.2875"></a>
<span class="sourceLineNo">2876</span><a name="line.2876"></a>
<span class="sourceLineNo">2877</span>      final String flushCommits = "--flushCommits=";<a name="line.2877"></a>
<span class="sourceLineNo">2878</span>      if (cmd.startsWith(flushCommits)) {<a name="line.2878"></a>
<span class="sourceLineNo">2879</span>        opts.flushCommits = Boolean.parseBoolean(cmd.substring(flushCommits.length()));<a name="line.2879"></a>
<span class="sourceLineNo">2880</span>        continue;<a name="line.2880"></a>
<span class="sourceLineNo">2881</span>      }<a name="line.2881"></a>
<span class="sourceLineNo">2882</span><a name="line.2882"></a>
<span class="sourceLineNo">2883</span>      final String writeToWAL = "--writeToWAL=";<a name="line.2883"></a>
<span class="sourceLineNo">2884</span>      if (cmd.startsWith(writeToWAL)) {<a name="line.2884"></a>
<span class="sourceLineNo">2885</span>        opts.writeToWAL = Boolean.parseBoolean(cmd.substring(writeToWAL.length()));<a name="line.2885"></a>
<span class="sourceLineNo">2886</span>        continue;<a name="line.2886"></a>
<span class="sourceLineNo">2887</span>      }<a name="line.2887"></a>
<span class="sourceLineNo">2888</span><a name="line.2888"></a>
<span class="sourceLineNo">2889</span>      final String presplit = "--presplit=";<a name="line.2889"></a>
<span class="sourceLineNo">2890</span>      if (cmd.startsWith(presplit)) {<a name="line.2890"></a>
<span class="sourceLineNo">2891</span>        opts.presplitRegions = Integer.parseInt(cmd.substring(presplit.length()));<a name="line.2891"></a>
<span class="sourceLineNo">2892</span>        continue;<a name="line.2892"></a>
<span class="sourceLineNo">2893</span>      }<a name="line.2893"></a>
<span class="sourceLineNo">2894</span><a name="line.2894"></a>
<span class="sourceLineNo">2895</span>      final String inMemory = "--inmemory=";<a name="line.2895"></a>
<span class="sourceLineNo">2896</span>      if (cmd.startsWith(inMemory)) {<a name="line.2896"></a>
<span class="sourceLineNo">2897</span>        opts.inMemoryCF = Boolean.parseBoolean(cmd.substring(inMemory.length()));<a name="line.2897"></a>
<span class="sourceLineNo">2898</span>        continue;<a name="line.2898"></a>
<span class="sourceLineNo">2899</span>      }<a name="line.2899"></a>
<span class="sourceLineNo">2900</span><a name="line.2900"></a>
<span class="sourceLineNo">2901</span>      final String autoFlush = "--autoFlush=";<a name="line.2901"></a>
<span class="sourceLineNo">2902</span>      if (cmd.startsWith(autoFlush)) {<a name="line.2902"></a>
<span class="sourceLineNo">2903</span>        opts.autoFlush = Boolean.parseBoolean(cmd.substring(autoFlush.length()));<a name="line.2903"></a>
<span class="sourceLineNo">2904</span>        continue;<a name="line.2904"></a>
<span class="sourceLineNo">2905</span>      }<a name="line.2905"></a>
<span class="sourceLineNo">2906</span><a name="line.2906"></a>
<span class="sourceLineNo">2907</span>      final String onceCon = "--oneCon=";<a name="line.2907"></a>
<span class="sourceLineNo">2908</span>      if (cmd.startsWith(onceCon)) {<a name="line.2908"></a>
<span class="sourceLineNo">2909</span>        opts.oneCon = Boolean.parseBoolean(cmd.substring(onceCon.length()));<a name="line.2909"></a>
<span class="sourceLineNo">2910</span>        continue;<a name="line.2910"></a>
<span class="sourceLineNo">2911</span>      }<a name="line.2911"></a>
<span class="sourceLineNo">2912</span><a name="line.2912"></a>
<span class="sourceLineNo">2913</span>      final String connCount = "--connCount=";<a name="line.2913"></a>
<span class="sourceLineNo">2914</span>      if (cmd.startsWith(connCount)) {<a name="line.2914"></a>
<span class="sourceLineNo">2915</span>        opts.connCount = Integer.parseInt(cmd.substring(connCount.length()));<a name="line.2915"></a>
<span class="sourceLineNo">2916</span>        continue;<a name="line.2916"></a>
<span class="sourceLineNo">2917</span>      }<a name="line.2917"></a>
<span class="sourceLineNo">2918</span><a name="line.2918"></a>
<span class="sourceLineNo">2919</span>      final String latencyThreshold = "--latencyThreshold=";<a name="line.2919"></a>
<span class="sourceLineNo">2920</span>      if (cmd.startsWith(latencyThreshold)) {<a name="line.2920"></a>
<span class="sourceLineNo">2921</span>        opts.latencyThreshold = Integer.parseInt(cmd.substring(latencyThreshold.length()));<a name="line.2921"></a>
<span class="sourceLineNo">2922</span>        continue;<a name="line.2922"></a>
<span class="sourceLineNo">2923</span>      }<a name="line.2923"></a>
<span class="sourceLineNo">2924</span><a name="line.2924"></a>
<span class="sourceLineNo">2925</span>      final String latency = "--latency";<a name="line.2925"></a>
<span class="sourceLineNo">2926</span>      if (cmd.startsWith(latency)) {<a name="line.2926"></a>
<span class="sourceLineNo">2927</span>        opts.reportLatency = true;<a name="line.2927"></a>
<span class="sourceLineNo">2928</span>        continue;<a name="line.2928"></a>
<span class="sourceLineNo">2929</span>      }<a name="line.2929"></a>
<span class="sourceLineNo">2930</span><a name="line.2930"></a>
<span class="sourceLineNo">2931</span>      final String multiGet = "--multiGet=";<a name="line.2931"></a>
<span class="sourceLineNo">2932</span>      if (cmd.startsWith(multiGet)) {<a name="line.2932"></a>
<span class="sourceLineNo">2933</span>        opts.multiGet = Integer.parseInt(cmd.substring(multiGet.length()));<a name="line.2933"></a>
<span class="sourceLineNo">2934</span>        continue;<a name="line.2934"></a>
<span class="sourceLineNo">2935</span>      }<a name="line.2935"></a>
<span class="sourceLineNo">2936</span><a name="line.2936"></a>
<span class="sourceLineNo">2937</span>      final String multiPut = "--multiPut=";<a name="line.2937"></a>
<span class="sourceLineNo">2938</span>      if (cmd.startsWith(multiPut)) {<a name="line.2938"></a>
<span class="sourceLineNo">2939</span>        opts.multiPut = Integer.parseInt(cmd.substring(multiPut.length()));<a name="line.2939"></a>
<span class="sourceLineNo">2940</span>        continue;<a name="line.2940"></a>
<span class="sourceLineNo">2941</span>      }<a name="line.2941"></a>
<span class="sourceLineNo">2942</span><a name="line.2942"></a>
<span class="sourceLineNo">2943</span>      final String useTags = "--usetags=";<a name="line.2943"></a>
<span class="sourceLineNo">2944</span>      if (cmd.startsWith(useTags)) {<a name="line.2944"></a>
<span class="sourceLineNo">2945</span>        opts.useTags = Boolean.parseBoolean(cmd.substring(useTags.length()));<a name="line.2945"></a>
<span class="sourceLineNo">2946</span>        continue;<a name="line.2946"></a>
<span class="sourceLineNo">2947</span>      }<a name="line.2947"></a>
<span class="sourceLineNo">2948</span><a name="line.2948"></a>
<span class="sourceLineNo">2949</span>      final String noOfTags = "--numoftags=";<a name="line.2949"></a>
<span class="sourceLineNo">2950</span>      if (cmd.startsWith(noOfTags)) {<a name="line.2950"></a>
<span class="sourceLineNo">2951</span>        opts.noOfTags = Integer.parseInt(cmd.substring(noOfTags.length()));<a name="line.2951"></a>
<span class="sourceLineNo">2952</span>        continue;<a name="line.2952"></a>
<span class="sourceLineNo">2953</span>      }<a name="line.2953"></a>
<span class="sourceLineNo">2954</span><a name="line.2954"></a>
<span class="sourceLineNo">2955</span>      final String replicas = "--replicas=";<a name="line.2955"></a>
<span class="sourceLineNo">2956</span>      if (cmd.startsWith(replicas)) {<a name="line.2956"></a>
<span class="sourceLineNo">2957</span>        opts.replicas = Integer.parseInt(cmd.substring(replicas.length()));<a name="line.2957"></a>
<span class="sourceLineNo">2958</span>        continue;<a name="line.2958"></a>
<span class="sourceLineNo">2959</span>      }<a name="line.2959"></a>
<span class="sourceLineNo">2960</span><a name="line.2960"></a>
<span class="sourceLineNo">2961</span>      final String filterOutAll = "--filterAll";<a name="line.2961"></a>
<span class="sourceLineNo">2962</span>      if (cmd.startsWith(filterOutAll)) {<a name="line.2962"></a>
<span class="sourceLineNo">2963</span>        opts.filterAll = true;<a name="line.2963"></a>
<span class="sourceLineNo">2964</span>        continue;<a name="line.2964"></a>
<span class="sourceLineNo">2965</span>      }<a name="line.2965"></a>
<span class="sourceLineNo">2966</span><a name="line.2966"></a>
<span class="sourceLineNo">2967</span>      final String size = "--size=";<a name="line.2967"></a>
<span class="sourceLineNo">2968</span>      if (cmd.startsWith(size)) {<a name="line.2968"></a>
<span class="sourceLineNo">2969</span>        opts.size = Float.parseFloat(cmd.substring(size.length()));<a name="line.2969"></a>
<span class="sourceLineNo">2970</span>        if (opts.size &lt;= 1.0f) throw new IllegalStateException("Size must be &gt; 1; i.e. 1GB");<a name="line.2970"></a>
<span class="sourceLineNo">2971</span>        continue;<a name="line.2971"></a>
<span class="sourceLineNo">2972</span>      }<a name="line.2972"></a>
<span class="sourceLineNo">2973</span><a name="line.2973"></a>
<span class="sourceLineNo">2974</span>      final String splitPolicy = "--splitPolicy=";<a name="line.2974"></a>
<span class="sourceLineNo">2975</span>      if (cmd.startsWith(splitPolicy)) {<a name="line.2975"></a>
<span class="sourceLineNo">2976</span>        opts.splitPolicy = cmd.substring(splitPolicy.length());<a name="line.2976"></a>
<span class="sourceLineNo">2977</span>        continue;<a name="line.2977"></a>
<span class="sourceLineNo">2978</span>      }<a name="line.2978"></a>
<span class="sourceLineNo">2979</span><a name="line.2979"></a>
<span class="sourceLineNo">2980</span>      final String randomSleep = "--randomSleep=";<a name="line.2980"></a>
<span class="sourceLineNo">2981</span>      if (cmd.startsWith(randomSleep)) {<a name="line.2981"></a>
<span class="sourceLineNo">2982</span>        opts.randomSleep = Integer.parseInt(cmd.substring(randomSleep.length()));<a name="line.2982"></a>
<span class="sourceLineNo">2983</span>        continue;<a name="line.2983"></a>
<span class="sourceLineNo">2984</span>      }<a name="line.2984"></a>
<span class="sourceLineNo">2985</span><a name="line.2985"></a>
<span class="sourceLineNo">2986</span>      final String measureAfter = "--measureAfter=";<a name="line.2986"></a>
<span class="sourceLineNo">2987</span>      if (cmd.startsWith(measureAfter)) {<a name="line.2987"></a>
<span class="sourceLineNo">2988</span>        opts.measureAfter = Integer.parseInt(cmd.substring(measureAfter.length()));<a name="line.2988"></a>
<span class="sourceLineNo">2989</span>        continue;<a name="line.2989"></a>
<span class="sourceLineNo">2990</span>      }<a name="line.2990"></a>
<span class="sourceLineNo">2991</span><a name="line.2991"></a>
<span class="sourceLineNo">2992</span>      final String bloomFilter = "--bloomFilter=";<a name="line.2992"></a>
<span class="sourceLineNo">2993</span>      if (cmd.startsWith(bloomFilter)) {<a name="line.2993"></a>
<span class="sourceLineNo">2994</span>        opts.bloomType = BloomType.valueOf(cmd.substring(bloomFilter.length()));<a name="line.2994"></a>
<span class="sourceLineNo">2995</span>        continue;<a name="line.2995"></a>
<span class="sourceLineNo">2996</span>      }<a name="line.2996"></a>
<span class="sourceLineNo">2997</span><a name="line.2997"></a>
<span class="sourceLineNo">2998</span>      final String blockSize = "--blockSize=";<a name="line.2998"></a>
<span class="sourceLineNo">2999</span>      if (cmd.startsWith(blockSize)) {<a name="line.2999"></a>
<span class="sourceLineNo">3000</span>        opts.blockSize = Integer.parseInt(cmd.substring(blockSize.length()));<a name="line.3000"></a>
<span class="sourceLineNo">3001</span>        continue;<a name="line.3001"></a>
<span class="sourceLineNo">3002</span>      }<a name="line.3002"></a>
<span class="sourceLineNo">3003</span><a name="line.3003"></a>
<span class="sourceLineNo">3004</span>      final String valueSize = "--valueSize=";<a name="line.3004"></a>
<span class="sourceLineNo">3005</span>      if (cmd.startsWith(valueSize)) {<a name="line.3005"></a>
<span class="sourceLineNo">3006</span>        opts.valueSize = Integer.parseInt(cmd.substring(valueSize.length()));<a name="line.3006"></a>
<span class="sourceLineNo">3007</span>        continue;<a name="line.3007"></a>
<span class="sourceLineNo">3008</span>      }<a name="line.3008"></a>
<span class="sourceLineNo">3009</span><a name="line.3009"></a>
<span class="sourceLineNo">3010</span>      final String valueRandom = "--valueRandom";<a name="line.3010"></a>
<span class="sourceLineNo">3011</span>      if (cmd.startsWith(valueRandom)) {<a name="line.3011"></a>
<span class="sourceLineNo">3012</span>        opts.valueRandom = true;<a name="line.3012"></a>
<span class="sourceLineNo">3013</span>        continue;<a name="line.3013"></a>
<span class="sourceLineNo">3014</span>      }<a name="line.3014"></a>
<span class="sourceLineNo">3015</span><a name="line.3015"></a>
<span class="sourceLineNo">3016</span>      final String valueZipf = "--valueZipf";<a name="line.3016"></a>
<span class="sourceLineNo">3017</span>      if (cmd.startsWith(valueZipf)) {<a name="line.3017"></a>
<span class="sourceLineNo">3018</span>        opts.valueZipf = true;<a name="line.3018"></a>
<span class="sourceLineNo">3019</span>        continue;<a name="line.3019"></a>
<span class="sourceLineNo">3020</span>      }<a name="line.3020"></a>
<span class="sourceLineNo">3021</span><a name="line.3021"></a>
<span class="sourceLineNo">3022</span>      final String period = "--period=";<a name="line.3022"></a>
<span class="sourceLineNo">3023</span>      if (cmd.startsWith(period)) {<a name="line.3023"></a>
<span class="sourceLineNo">3024</span>        opts.period = Integer.parseInt(cmd.substring(period.length()));<a name="line.3024"></a>
<span class="sourceLineNo">3025</span>        continue;<a name="line.3025"></a>
<span class="sourceLineNo">3026</span>      }<a name="line.3026"></a>
<span class="sourceLineNo">3027</span><a name="line.3027"></a>
<span class="sourceLineNo">3028</span>      final String addColumns = "--addColumns=";<a name="line.3028"></a>
<span class="sourceLineNo">3029</span>      if (cmd.startsWith(addColumns)) {<a name="line.3029"></a>
<span class="sourceLineNo">3030</span>        opts.addColumns = Boolean.parseBoolean(cmd.substring(addColumns.length()));<a name="line.3030"></a>
<span class="sourceLineNo">3031</span>        continue;<a name="line.3031"></a>
<span class="sourceLineNo">3032</span>      }<a name="line.3032"></a>
<span class="sourceLineNo">3033</span><a name="line.3033"></a>
<span class="sourceLineNo">3034</span>      final String inMemoryCompaction = "--inmemoryCompaction=";<a name="line.3034"></a>
<span class="sourceLineNo">3035</span>      if (cmd.startsWith(inMemoryCompaction)) {<a name="line.3035"></a>
<span class="sourceLineNo">3036</span>        opts.inMemoryCompaction =<a name="line.3036"></a>
<span class="sourceLineNo">3037</span>          MemoryCompactionPolicy.valueOf(cmd.substring(inMemoryCompaction.length()));<a name="line.3037"></a>
<span class="sourceLineNo">3038</span>        continue;<a name="line.3038"></a>
<span class="sourceLineNo">3039</span>      }<a name="line.3039"></a>
<span class="sourceLineNo">3040</span><a name="line.3040"></a>
<span class="sourceLineNo">3041</span>      final String columns = "--columns=";<a name="line.3041"></a>
<span class="sourceLineNo">3042</span>      if (cmd.startsWith(columns)) {<a name="line.3042"></a>
<span class="sourceLineNo">3043</span>        opts.columns = Integer.parseInt(cmd.substring(columns.length()));<a name="line.3043"></a>
<span class="sourceLineNo">3044</span>        continue;<a name="line.3044"></a>
<span class="sourceLineNo">3045</span>      }<a name="line.3045"></a>
<span class="sourceLineNo">3046</span><a name="line.3046"></a>
<span class="sourceLineNo">3047</span>      final String families = "--families=";<a name="line.3047"></a>
<span class="sourceLineNo">3048</span>      if (cmd.startsWith(families)) {<a name="line.3048"></a>
<span class="sourceLineNo">3049</span>        opts.families = Integer.parseInt(cmd.substring(families.length()));<a name="line.3049"></a>
<span class="sourceLineNo">3050</span>        continue;<a name="line.3050"></a>
<span class="sourceLineNo">3051</span>      }<a name="line.3051"></a>
<span class="sourceLineNo">3052</span><a name="line.3052"></a>
<span class="sourceLineNo">3053</span>      final String caching = "--caching=";<a name="line.3053"></a>
<span class="sourceLineNo">3054</span>      if (cmd.startsWith(caching)) {<a name="line.3054"></a>
<span class="sourceLineNo">3055</span>        opts.caching = Integer.parseInt(cmd.substring(caching.length()));<a name="line.3055"></a>
<span class="sourceLineNo">3056</span>        continue;<a name="line.3056"></a>
<span class="sourceLineNo">3057</span>      }<a name="line.3057"></a>
<span class="sourceLineNo">3058</span><a name="line.3058"></a>
<span class="sourceLineNo">3059</span>      final String asyncPrefetch = "--asyncPrefetch";<a name="line.3059"></a>
<span class="sourceLineNo">3060</span>      if (cmd.startsWith(asyncPrefetch)) {<a name="line.3060"></a>
<span class="sourceLineNo">3061</span>        opts.asyncPrefetch = true;<a name="line.3061"></a>
<span class="sourceLineNo">3062</span>        continue;<a name="line.3062"></a>
<span class="sourceLineNo">3063</span>      }<a name="line.3063"></a>
<span class="sourceLineNo">3064</span><a name="line.3064"></a>
<span class="sourceLineNo">3065</span>      final String cacheBlocks = "--cacheBlocks=";<a name="line.3065"></a>
<span class="sourceLineNo">3066</span>      if (cmd.startsWith(cacheBlocks)) {<a name="line.3066"></a>
<span class="sourceLineNo">3067</span>        opts.cacheBlocks = Boolean.parseBoolean(cmd.substring(cacheBlocks.length()));<a name="line.3067"></a>
<span class="sourceLineNo">3068</span>        continue;<a name="line.3068"></a>
<span class="sourceLineNo">3069</span>      }<a name="line.3069"></a>
<span class="sourceLineNo">3070</span><a name="line.3070"></a>
<span class="sourceLineNo">3071</span>      final String scanReadType = "--scanReadType=";<a name="line.3071"></a>
<span class="sourceLineNo">3072</span>      if (cmd.startsWith(scanReadType)) {<a name="line.3072"></a>
<span class="sourceLineNo">3073</span>        opts.scanReadType =<a name="line.3073"></a>
<span class="sourceLineNo">3074</span>          Scan.ReadType.valueOf(cmd.substring(scanReadType.length()).toUpperCase());<a name="line.3074"></a>
<span class="sourceLineNo">3075</span>        continue;<a name="line.3075"></a>
<span class="sourceLineNo">3076</span>      }<a name="line.3076"></a>
<span class="sourceLineNo">3077</span><a name="line.3077"></a>
<span class="sourceLineNo">3078</span>      final String bufferSize = "--bufferSize=";<a name="line.3078"></a>
<span class="sourceLineNo">3079</span>      if (cmd.startsWith(bufferSize)) {<a name="line.3079"></a>
<span class="sourceLineNo">3080</span>        opts.bufferSize = Long.parseLong(cmd.substring(bufferSize.length()));<a name="line.3080"></a>
<span class="sourceLineNo">3081</span>        continue;<a name="line.3081"></a>
<span class="sourceLineNo">3082</span>      }<a name="line.3082"></a>
<span class="sourceLineNo">3083</span><a name="line.3083"></a>
<span class="sourceLineNo">3084</span>      final String commandPropertiesFile = "--commandPropertiesFile=";<a name="line.3084"></a>
<span class="sourceLineNo">3085</span>      if (cmd.startsWith(commandPropertiesFile)) {<a name="line.3085"></a>
<span class="sourceLineNo">3086</span>        String fileName = String.valueOf(cmd.substring(commandPropertiesFile.length()));<a name="line.3086"></a>
<span class="sourceLineNo">3087</span>        Properties properties = new Properties();<a name="line.3087"></a>
<span class="sourceLineNo">3088</span>        try {<a name="line.3088"></a>
<span class="sourceLineNo">3089</span>          properties<a name="line.3089"></a>
<span class="sourceLineNo">3090</span>            .load(PerformanceEvaluation.class.getClassLoader().getResourceAsStream(fileName));<a name="line.3090"></a>
<span class="sourceLineNo">3091</span>          opts.commandProperties = properties;<a name="line.3091"></a>
<span class="sourceLineNo">3092</span>        } catch (IOException e) {<a name="line.3092"></a>
<span class="sourceLineNo">3093</span>          LOG.error("Failed to load metricIds from properties file", e);<a name="line.3093"></a>
<span class="sourceLineNo">3094</span>        }<a name="line.3094"></a>
<span class="sourceLineNo">3095</span>        continue;<a name="line.3095"></a>
<span class="sourceLineNo">3096</span>      }<a name="line.3096"></a>
<span class="sourceLineNo">3097</span><a name="line.3097"></a>
<span class="sourceLineNo">3098</span>      validateParsedOpts(opts);<a name="line.3098"></a>
<span class="sourceLineNo">3099</span><a name="line.3099"></a>
<span class="sourceLineNo">3100</span>      if (isCommandClass(cmd)) {<a name="line.3100"></a>
<span class="sourceLineNo">3101</span>        opts.cmdName = cmd;<a name="line.3101"></a>
<span class="sourceLineNo">3102</span>        try {<a name="line.3102"></a>
<span class="sourceLineNo">3103</span>          opts.numClientThreads = Integer.parseInt(args.remove());<a name="line.3103"></a>
<span class="sourceLineNo">3104</span>        } catch (NoSuchElementException | NumberFormatException e) {<a name="line.3104"></a>
<span class="sourceLineNo">3105</span>          throw new IllegalArgumentException("Command " + cmd + " does not have threads number", e);<a name="line.3105"></a>
<span class="sourceLineNo">3106</span>        }<a name="line.3106"></a>
<span class="sourceLineNo">3107</span>        opts = calculateRowsAndSize(opts);<a name="line.3107"></a>
<span class="sourceLineNo">3108</span>        break;<a name="line.3108"></a>
<span class="sourceLineNo">3109</span>      } else {<a name="line.3109"></a>
<span class="sourceLineNo">3110</span>        printUsageAndExit("ERROR: Unrecognized option/command: " + cmd, -1);<a name="line.3110"></a>
<span class="sourceLineNo">3111</span>      }<a name="line.3111"></a>
<span class="sourceLineNo">3112</span><a name="line.3112"></a>
<span class="sourceLineNo">3113</span>      // Not matching any option or command.<a name="line.3113"></a>
<span class="sourceLineNo">3114</span>      System.err.println("Error: Wrong option or command: " + cmd);<a name="line.3114"></a>
<span class="sourceLineNo">3115</span>      args.add(cmd);<a name="line.3115"></a>
<span class="sourceLineNo">3116</span>      break;<a name="line.3116"></a>
<span class="sourceLineNo">3117</span>    }<a name="line.3117"></a>
<span class="sourceLineNo">3118</span>    return opts;<a name="line.3118"></a>
<span class="sourceLineNo">3119</span>  }<a name="line.3119"></a>
<span class="sourceLineNo">3120</span><a name="line.3120"></a>
<span class="sourceLineNo">3121</span>  /**<a name="line.3121"></a>
<span class="sourceLineNo">3122</span>   * Validates opts after all the opts are parsed, so that caller need not to maintain order of opts<a name="line.3122"></a>
<span class="sourceLineNo">3123</span>   */<a name="line.3123"></a>
<span class="sourceLineNo">3124</span>  private static void validateParsedOpts(TestOptions opts) {<a name="line.3124"></a>
<span class="sourceLineNo">3125</span><a name="line.3125"></a>
<span class="sourceLineNo">3126</span>    if (!opts.autoFlush &amp;&amp; opts.multiPut &gt; 0) {<a name="line.3126"></a>
<span class="sourceLineNo">3127</span>      throw new IllegalArgumentException("autoFlush must be true when multiPut is more than 0");<a name="line.3127"></a>
<span class="sourceLineNo">3128</span>    }<a name="line.3128"></a>
<span class="sourceLineNo">3129</span><a name="line.3129"></a>
<span class="sourceLineNo">3130</span>    if (opts.oneCon &amp;&amp; opts.connCount &gt; 1) {<a name="line.3130"></a>
<span class="sourceLineNo">3131</span>      throw new IllegalArgumentException(<a name="line.3131"></a>
<span class="sourceLineNo">3132</span>        "oneCon is set to true, " + "connCount should not bigger than 1");<a name="line.3132"></a>
<span class="sourceLineNo">3133</span>    }<a name="line.3133"></a>
<span class="sourceLineNo">3134</span><a name="line.3134"></a>
<span class="sourceLineNo">3135</span>    if (opts.valueZipf &amp;&amp; opts.valueRandom) {<a name="line.3135"></a>
<span class="sourceLineNo">3136</span>      throw new IllegalStateException("Either valueZipf or valueRandom but not both");<a name="line.3136"></a>
<span class="sourceLineNo">3137</span>    }<a name="line.3137"></a>
<span class="sourceLineNo">3138</span>  }<a name="line.3138"></a>
<span class="sourceLineNo">3139</span><a name="line.3139"></a>
<span class="sourceLineNo">3140</span>  static TestOptions calculateRowsAndSize(final TestOptions opts) {<a name="line.3140"></a>
<span class="sourceLineNo">3141</span>    int rowsPerGB = getRowsPerGB(opts);<a name="line.3141"></a>
<span class="sourceLineNo">3142</span>    if (<a name="line.3142"></a>
<span class="sourceLineNo">3143</span>      (opts.getCmdName() != null<a name="line.3143"></a>
<span class="sourceLineNo">3144</span>        &amp;&amp; (opts.getCmdName().equals(RANDOM_READ) || opts.getCmdName().equals(RANDOM_SEEK_SCAN)))<a name="line.3144"></a>
<span class="sourceLineNo">3145</span>        &amp;&amp; opts.size != DEFAULT_OPTS.size &amp;&amp; opts.perClientRunRows != DEFAULT_OPTS.perClientRunRows<a name="line.3145"></a>
<span class="sourceLineNo">3146</span>    ) {<a name="line.3146"></a>
<span class="sourceLineNo">3147</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.3147"></a>
<span class="sourceLineNo">3148</span>    } else if (opts.size != DEFAULT_OPTS.size) {<a name="line.3148"></a>
<span class="sourceLineNo">3149</span>      // total size in GB specified<a name="line.3149"></a>
<span class="sourceLineNo">3150</span>      opts.totalRows = (int) opts.size * rowsPerGB;<a name="line.3150"></a>
<span class="sourceLineNo">3151</span>      opts.perClientRunRows = opts.totalRows / opts.numClientThreads;<a name="line.3151"></a>
<span class="sourceLineNo">3152</span>    } else {<a name="line.3152"></a>
<span class="sourceLineNo">3153</span>      opts.totalRows = opts.perClientRunRows * opts.numClientThreads;<a name="line.3153"></a>
<span class="sourceLineNo">3154</span>      opts.size = opts.totalRows / rowsPerGB;<a name="line.3154"></a>
<span class="sourceLineNo">3155</span>    }<a name="line.3155"></a>
<span class="sourceLineNo">3156</span>    return opts;<a name="line.3156"></a>
<span class="sourceLineNo">3157</span>  }<a name="line.3157"></a>
<span class="sourceLineNo">3158</span><a name="line.3158"></a>
<span class="sourceLineNo">3159</span>  static int getRowsPerGB(final TestOptions opts) {<a name="line.3159"></a>
<span class="sourceLineNo">3160</span>    return ONE_GB / ((opts.valueRandom ? opts.valueSize / 2 : opts.valueSize) * opts.getFamilies()<a name="line.3160"></a>
<span class="sourceLineNo">3161</span>      * opts.getColumns());<a name="line.3161"></a>
<span class="sourceLineNo">3162</span>  }<a name="line.3162"></a>
<span class="sourceLineNo">3163</span><a name="line.3163"></a>
<span class="sourceLineNo">3164</span>  @Override<a name="line.3164"></a>
<span class="sourceLineNo">3165</span>  public int run(String[] args) throws Exception {<a name="line.3165"></a>
<span class="sourceLineNo">3166</span>    // Process command-line args. TODO: Better cmd-line processing<a name="line.3166"></a>
<span class="sourceLineNo">3167</span>    // (but hopefully something not as painful as cli options).<a name="line.3167"></a>
<span class="sourceLineNo">3168</span>    int errCode = -1;<a name="line.3168"></a>
<span class="sourceLineNo">3169</span>    if (args.length &lt; 1) {<a name="line.3169"></a>
<span class="sourceLineNo">3170</span>      printUsage();<a name="line.3170"></a>
<span class="sourceLineNo">3171</span>      return errCode;<a name="line.3171"></a>
<span class="sourceLineNo">3172</span>    }<a name="line.3172"></a>
<span class="sourceLineNo">3173</span><a name="line.3173"></a>
<span class="sourceLineNo">3174</span>    try {<a name="line.3174"></a>
<span class="sourceLineNo">3175</span>      LinkedList&lt;String&gt; argv = new LinkedList&lt;&gt;();<a name="line.3175"></a>
<span class="sourceLineNo">3176</span>      argv.addAll(Arrays.asList(args));<a name="line.3176"></a>
<span class="sourceLineNo">3177</span>      TestOptions opts = parseOpts(argv);<a name="line.3177"></a>
<span class="sourceLineNo">3178</span><a name="line.3178"></a>
<span class="sourceLineNo">3179</span>      // args remaining, print help and exit<a name="line.3179"></a>
<span class="sourceLineNo">3180</span>      if (!argv.isEmpty()) {<a name="line.3180"></a>
<span class="sourceLineNo">3181</span>        errCode = 0;<a name="line.3181"></a>
<span class="sourceLineNo">3182</span>        printUsage();<a name="line.3182"></a>
<span class="sourceLineNo">3183</span>        return errCode;<a name="line.3183"></a>
<span class="sourceLineNo">3184</span>      }<a name="line.3184"></a>
<span class="sourceLineNo">3185</span><a name="line.3185"></a>
<span class="sourceLineNo">3186</span>      // must run at least 1 client<a name="line.3186"></a>
<span class="sourceLineNo">3187</span>      if (opts.numClientThreads &lt;= 0) {<a name="line.3187"></a>
<span class="sourceLineNo">3188</span>        throw new IllegalArgumentException("Number of clients must be &gt; 0");<a name="line.3188"></a>
<span class="sourceLineNo">3189</span>      }<a name="line.3189"></a>
<span class="sourceLineNo">3190</span><a name="line.3190"></a>
<span class="sourceLineNo">3191</span>      // cmdName should not be null, print help and exit<a name="line.3191"></a>
<span class="sourceLineNo">3192</span>      if (opts.cmdName == null) {<a name="line.3192"></a>
<span class="sourceLineNo">3193</span>        printUsage();<a name="line.3193"></a>
<span class="sourceLineNo">3194</span>        return errCode;<a name="line.3194"></a>
<span class="sourceLineNo">3195</span>      }<a name="line.3195"></a>
<span class="sourceLineNo">3196</span><a name="line.3196"></a>
<span class="sourceLineNo">3197</span>      Class&lt;? extends TestBase&gt; cmdClass = determineCommandClass(opts.cmdName);<a name="line.3197"></a>
<span class="sourceLineNo">3198</span>      if (cmdClass != null) {<a name="line.3198"></a>
<span class="sourceLineNo">3199</span>        runTest(cmdClass, opts);<a name="line.3199"></a>
<span class="sourceLineNo">3200</span>        errCode = 0;<a name="line.3200"></a>
<span class="sourceLineNo">3201</span>      }<a name="line.3201"></a>
<span class="sourceLineNo">3202</span><a name="line.3202"></a>
<span class="sourceLineNo">3203</span>    } catch (Exception e) {<a name="line.3203"></a>
<span class="sourceLineNo">3204</span>      e.printStackTrace();<a name="line.3204"></a>
<span class="sourceLineNo">3205</span>    }<a name="line.3205"></a>
<span class="sourceLineNo">3206</span><a name="line.3206"></a>
<span class="sourceLineNo">3207</span>    return errCode;<a name="line.3207"></a>
<span class="sourceLineNo">3208</span>  }<a name="line.3208"></a>
<span class="sourceLineNo">3209</span><a name="line.3209"></a>
<span class="sourceLineNo">3210</span>  private static boolean isCommandClass(String cmd) {<a name="line.3210"></a>
<span class="sourceLineNo">3211</span>    return COMMANDS.containsKey(cmd) || isCustomTestClass(cmd);<a name="line.3211"></a>
<span class="sourceLineNo">3212</span>  }<a name="line.3212"></a>
<span class="sourceLineNo">3213</span><a name="line.3213"></a>
<span class="sourceLineNo">3214</span>  private static boolean isCustomTestClass(String cmd) {<a name="line.3214"></a>
<span class="sourceLineNo">3215</span>    Class&lt;? extends Test&gt; cmdClass;<a name="line.3215"></a>
<span class="sourceLineNo">3216</span>    try {<a name="line.3216"></a>
<span class="sourceLineNo">3217</span>      cmdClass =<a name="line.3217"></a>
<span class="sourceLineNo">3218</span>        (Class&lt;? extends Test&gt;) PerformanceEvaluation.class.getClassLoader().loadClass(cmd);<a name="line.3218"></a>
<span class="sourceLineNo">3219</span>      addCommandDescriptor(cmdClass, cmd, "custom command");<a name="line.3219"></a>
<span class="sourceLineNo">3220</span>      return true;<a name="line.3220"></a>
<span class="sourceLineNo">3221</span>    } catch (Throwable th) {<a name="line.3221"></a>
<span class="sourceLineNo">3222</span>      LOG.info("No class found for command: " + cmd, th);<a name="line.3222"></a>
<span class="sourceLineNo">3223</span>      return false;<a name="line.3223"></a>
<span class="sourceLineNo">3224</span>    }<a name="line.3224"></a>
<span class="sourceLineNo">3225</span>  }<a name="line.3225"></a>
<span class="sourceLineNo">3226</span><a name="line.3226"></a>
<span class="sourceLineNo">3227</span>  private static Class&lt;? extends TestBase&gt; determineCommandClass(String cmd) {<a name="line.3227"></a>
<span class="sourceLineNo">3228</span>    CmdDescriptor descriptor = COMMANDS.get(cmd);<a name="line.3228"></a>
<span class="sourceLineNo">3229</span>    return descriptor != null ? descriptor.getCmdClass() : null;<a name="line.3229"></a>
<span class="sourceLineNo">3230</span>  }<a name="line.3230"></a>
<span class="sourceLineNo">3231</span><a name="line.3231"></a>
<span class="sourceLineNo">3232</span>  public static void main(final String[] args) throws Exception {<a name="line.3232"></a>
<span class="sourceLineNo">3233</span>    int res = ToolRunner.run(new PerformanceEvaluation(HBaseConfiguration.create()), args);<a name="line.3233"></a>
<span class="sourceLineNo">3234</span>    System.exit(res);<a name="line.3234"></a>
<span class="sourceLineNo">3235</span>  }<a name="line.3235"></a>
<span class="sourceLineNo">3236</span>}<a name="line.3236"></a>




























































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